首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果我只是读而不是写,我应该在多线程中使用全局变量吗?

在多线程中,如果你只是读而不是写全局变量,通常情况下是可以使用全局变量的。因为在多线程环境下,多个线程可以同时读取全局变量的值而不会产生冲突。

然而,需要注意的是,如果全局变量在读取的同时可能会被其他线程修改,那么就需要采取一些措施来保证数据的一致性。这可以通过使用同步机制来实现,例如使用互斥锁(mutex)或读写锁(read-write lock)来保护全局变量的读取操作。

另外,如果全局变量的值在多个线程之间需要共享,并且可能会被写操作修改,那么就需要特别小心。在这种情况下,应该使用线程安全的数据结构或同步机制来保证数据的一致性,以避免数据竞争和不确定的结果。

总结起来,如果你只是读取全局变量而不会被其他线程修改,并且能够保证数据的一致性,那么在多线程中使用全局变量是可以的。但如果存在写操作或需要共享数据,就需要采取适当的同步机制来保证线程安全。

相关搜索:我应该为此使用路由吗?或者只是如果不是这样呢?如果我使用&&而不是AND,它会对我的脚本产生任何差异吗?如果多次使用它,我应该在jQuery中缓存$(this)吗?我可以在这里使用Javascript Closures而不是全局变量吗?我应该使用全局变量吗?如果不是,那又是什么?(JavaScript)的在Spring Kafka中,如果我只是使用producer,我需要在我的应用程序中添加@EnableKafka注释吗?我应该在设计中使用SystemVerilog 2状态数据类型(而不是验证)吗?在C++中,我应该使用qsort而不是sort吗?我应该在创建Xamarin对象的类的签名中使用BindingBase而不是Binding吗?如果在Gatsby中,我使用<a>标记而不是GatsbyLinks,会发生什么?如果我使用Wasm而不是Javascript,这会被认为是AMP友好的吗?如果我使用ElasticSearch而不是关系数据库,有什么问题吗?对于ReactJS中的页面,我应该使用函数而不是类吗?如果我总是使用CSS类而不是CSS ID,那么有什么优点和缺点吗?我可以在这个程序中使用for each而不是for loop吗?如果是,请告诉我怎么做。如果我使用本机应用程序而不是webview应用程序,图像加载速度会更快吗?如果我在使用Mysql的Laravel中使用Query Builder而不是Eloquent ORM,那么模型仍然有用吗?如果我要在IIS中托管WCF服务,使用WCF服务而不是WCF库有什么好处?在使用webpacker的Rails6中,我可以通过application.css而不是application.js导入我的字体吗?对于数据帧中的NaN,我应该在excel中传递值0.00(百分比格式),而不是0。使用熊猫
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【RTOS训练营】继续程序框架、tick中断补充、预习、课后作业和晚课提问

问: 中断里的事情要快点干完,所以不应该在中断里delay?应该怎么消抖? 答: 我们可以使用定时器来消除抖动。 这个方法好像我以前介绍过,我现在再简单的讲一下原理,以前没有写过代码。...问: 多个中断处理程序都写缓冲区,会不会搞乱数据呢? 答: 会的,所有的环形缓冲区要考虑互斥。 要保证,同一时间,只能够有一个人来操作读它,或者写它。 假设有两个人,可以一个去读,一个去写。...但是,不能够两个人同时去读、同时去写。 我们可以加上一些保护的手段,比如说关中断,然后这样操作: 关中断 读/写 开中断 13. 问: 老师我想问一下,设备链表的链表头一般在哪里?...是不是.h中生明一个全局变量?规范做法是什么? 答: 有的链表头,都是定义一个全局变量,加上static。 14....问: SysTick是不是也是中断?是不是也不能做太多事情? 答: 是的,只是说建议不要做太多的事情,非要做一些很耗时的事情,那也没办法。 16. 问: 老师,缓冲区能抽象为一个通用的吗?

48340

2019年Java面试题基础系列228道(4),快看看哪些你还不会?

本次更新Java 面试题(二)的1~20题答案 1、Java 中能创建 volatile 数组吗? 能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。...double 和 long 都是 64 位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过程不是原子的,但 Java 中volatile 型的 long...简单的说,就是当你写一个 volatile 变量之前,Java 内存模型会插入一个写屏障(writebarrier),读一个 volatile 变量之前,会插入一个读屏障(read barrier)。...13、用 Java 写一个线程安全的单例模式(Singleton)? 一步一步创建一个线程安全的 Java 单例类。当我们说线程安全时,意思是即使初始化是在多线程环境中,仍然能保证单个实例。...数据类型和 Java 基础面试问题 17、Java 中应该使用什么数据类型来代表价格? 如果不是特别关心内存和性能的话,使用 BigDecimal,否则使用预定义精度的double 类型。

68000
  • C++ STL容器如何解决线程安全的问题?

    众所周知,STL容器不是线程安全的。对于vector,即使写方(生产者)是单线程写入,但是并发读的时候,由于潜在的内存重新申请和对象复制问题,会导致读方(消费者)的迭代器失效。...更多锁的种类可以阅读我之前写的这篇文章: 如何理解互斥锁、条件变量、读写锁以及自旋锁? 当然本文的目的自然不是自我重复再次介绍一次锁的使用,请继续阅读解法二!...但是在多线程的场景下,用resize再合适不过。 你可以resize好N个对象,多线程不管是读还是写,都是通过容器的下标访问operator[]来访问元素,不要push_back()新元素。...对此,在某些场景下也可以避免加锁:如果全量的key有办法在并发之前就能拿到的,那么就对这个map,提前做一下insert。并发环境中如果只是修改value,而不是插入新key就不会core dump!...另外对于unordered_map,在单写多读的多线程场景下,会不会有问题呢?也可能有。gcc 4.7.2的unordered_map实现曾被爆出有这个问题。

    3.5K40

    疯转|最近5年133个Java面试问题列表

    我确定你在自己的面试中见过很多这些问题,很多问题你也能正确回答。 多线程、并发及线程的基础问题 1)Java 中能创建 volatile 数组吗?...能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。...(答案) 这是我在写Java 并发程序的时候遵循的一些最佳实践: a)给线程命名,这样可以帮助调试。 b)最小化同步的范围,而不是将整个方法同步,只对关键部分做同步。...c)如果可以,更偏向于使用 volatile 而不是 synchronized。...(答案) 不是,非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat

    2.1K50

    Java 面试问题大全

    能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。...59)我们能自己写一个容器类,然后使用 for-each 循环吗? 可以,你可以写一个自己的容器类。如果你想使用 Java 中增强的循环来遍历,你只需要实现 Iterable 接口。...(答案) 这是我在写Java 并发程序的时候遵循的一些最佳实践:a)给线程命名,这样可以帮助调试。b)最小化同步的范围,而不是将整个方法同步,只对关键部分做同步。...c)如果可以,更偏向于使用 volatile 而不是 synchronized。...不是,非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat

    92240

    2 万多字,183 道 Java 面试题分析及答案

    我确定你在自己的面试中见过很多这些问题,很多问题你也能正确回答。 多线程、并发及线程的基础问题 1)Java 中能创建 volatile 数组吗?...能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。...59)我们能自己写一个容器类,然后使用 for-each 循环吗? 可以,你可以写一个自己的容器类。如果你想使用 Java 中增强的循环来遍历,你只需要实现 Iterable 接口。...如果你认为我这里有任何应该在这份列表中而被我遗漏了的 Java 流行的问题,你可以自由的给我建议。我的目的是从最近的面试中创建一份最新的、最优的 Java 面试问题列表。 1) 什么是线程?...在没有写线程的情况下一个读锁可能会同时被多个读线程持有。写锁是独占的,你可以使用JDK中的ReentrantReadWriteLock来实现这个规则,它最多支持65535个写锁和65535个读锁。

    1.1K20

    Linux:线程控制

    我只是想让你管理我,不是想让你当甩手掌柜然后自己啥代码也不执行,而且我要是自己退了,你就搁那傻傻循环啥也不管吗??你难道不关心我的运行结果吗??你难道不需要释放我的空间吗??...——>所以你平时写代码在不同的环境下没有感觉,是写库文件的设计者帮助你把这种差异给屏蔽掉了!! 所以我们平时刚推荐使用语言里的库方法而非系统调用接口,因为这样代码就不具备可移植性和跨平台性了!! ...——>先描述再组织 2、不用维护线程的执行流,这是由OS的轻量级进程完成的(已经帮我们封装了) 3、原生线程库必然要被加载到内存中,因此我们的线程属性集合也应该在线程库中维护 4、线程控制块就是库帮我们维护的一个用户级线程结构体...干嘛要定义这种私有的全局变量啊,我直接在自己的独立栈定义局部变量不就行了?? ——>可是如果你的线程内部将来也调用函数了呢??...所以局部存储私有的全局变量最核心的意义就是可以让该线程独立栈内部调用链上所有的函数都可以看得到这些信息,而不需要传参或者是频繁地调用系统调用!!

    12110

    2022 最新 Java 基础 面试题(二)

    我确定你 在自己的面试中见过很多这些问题, 很多问题你也能正确回答。 多线程、并发及线程的基础问题 1、Java 中能创建 volatile 数组吗?...76、Java 中,编写多线程程序的时候你会遵循哪些最佳实践? 这是我在写 Java 并发程序的时候遵循的一些最佳实践: a) 给线程命名, 这样可以帮助调试。...b) 最小化同步的范围, 而不是将整个方法同步, 只对关键部分做同步。 c) 如果可以, 更偏向于使用 volatile 而不是 synchronized。...不是, 非常不幸, DateFormat 的所有实现, 包括 SimpleDateFormat 都不是 线程安全的, 因此你不应该在多线程序中使用, 除非是在对外线程安全的环境中 使用, 如 将 SimpleDateFormat...如 果你认为我这里有任何应该在这份列表中而被我遗漏了 的 Java 流行的问题, 你可以自由的给我建议。 我的目的是从最近的面试中创建 一份最新的、 最优的 Java 面试问题列表。

    9710

    java多线程高级教程,这些你都懂了吗?

    有个属性是共享属性,这个关键字会在每个线程内开一块内存,每次子线程都会从主线程拿最新的属性放到内存中。但是有个问题,他只是拿最新的,比如:计数器,每个线程都执行+1操作。...这是hibernate的源码,如果当前线程没有session就openSession放到ThreadLocalMap中,每个线程的session都是独立的不会相互受影响。...ConCurrentHashMap(底层分成16个hashtable来保证并发)读支持高并发读,写和删除时候只支持16个线程,所以一般也要上锁; copyandwrite支持高并发读,写的话要加锁(原理是...这个demo我就不写了,用法和我们平时用的集合都一样,只是他们不会造成线程不安全。...lock和unlock是两次不相关的请求,因此肯定不是同一线程,因此导致无法使用ReentrantLock。

    63140

    新人怎样学习嵌入式Linux?

    如果你的目的是想学习底层系统,这是我的专长,倒是可以说一点。 在回答这个问题之前,我先回答:不少人问我,到底是学驱动还是学应用?  我只能说凭兴趣,并且驱动和应用并不是截然分开的  1....你能回答这几个问题吗? 1. 一上电,CPU从哪里取指令执行?    答:一般从Flash上指令。 2. 但是Flash一般是只能读不能直接写的,如果我用到全局变量,这些全局变量在哪里?    ...答:全局变量应该在内存里 3. 那么谁把全局变量放到内存里去?    答:长期用ADS、KEIL的朋友,你能回答吗?这需要"重定位"。...LDD3,即,老外写的那本,里面介绍了不少概念,值得一读。但是,它的作用也就限于介绍概念了。我基本上是入门之前用它来熟悉一下概念,入门后就扔掉了。...说一下我的学习经历吧。 1. 我在学校时读的是物理电子专业,其实课程里没有教怎么设计电路,只是教了些电子电路方面的知识。PCB的设计是在实验室里自学的,只设计过2层板,现在忘记得差不多了。

    5.3K10

    Golang 面试题

    大家好,又见面了,我是你们的朋友全栈君。 本文章收录于:后端工程师面试题目总结(提供参考答案) 目录 1. make与new的区别 2. 简要描述go中的main和init函数的区别 3....11、这段代码可以编译过吗,如果会错是在哪一行? 12、ABCD哪一行会报错? 13、下面的代码会怎样输出?每次输出结果一样吗?...答案:先打印出111111111,然后报错(死锁) 说明:两个协程都是读取c2中的元素,然后塞入c1, 然而c2又是无缓冲且没有任何协程在往c2中写数据,所以第一个协程读c2的时候就导致死锁,因为c2永远读不出数据...使用场景: 每次调用函数A时都要改变全局变量B,且B只与A相关,以往没有闭包时只能将B定义为全局变量;而现在可以将B定义为A的内部变量,将真正的执行函数作为闭包放在A内部去执行。...11、这段代码可以编译过吗,如果会错是在哪一行?

    57520

    多线程和多进程之间的区别(总结)

    一.为何须要多进程(或者多线程),为何须要并发? 这个问题也许本身都不是个问题。可是对于没有接触过多进程编程的朋友来说,他们确实无法感受到并发的魅力以及必要性。 我想。...而私有的线程空间则主要包含栈和寄存器。 因此。对于同一进程的不同线程来说。每一个线程的局部变量都是私有的。而全局变量、局部静态变量、分配于堆的变量都是共享的。...有足够权限的进程能够向队列中加入消息,被赋予读权限的进程则能够读走队列中的消息。消息队列克服了信号承载信息量少。管道仅仅能承载无格式字节流以及缓冲区大小受限等缺点。...也许你会有疑问,那多线程间要通信。应该怎么做?前面已经说了。多数的多线程都是在同一个进程下的,它们共享该进程的全局变量。我们能够通过全局变量来实现线程间通信。...只是,在同一时候调用多进程(子进程里也调用线程函数)和多线程的情况下,函数体内非常有可能死锁。 详细的样例能够看看这篇文章。

    60110

    快速学好一门编程语言

    关于如何学习一门编程语言的问题,新人总是会问,我能学会吗?我适合学编程吗,我的智商够吗?我通常会反问你觉得学英语难吗?我想说的是,其实学一门编程语言和学一门外语并不存在智商门槛的差别。...怎么学 首先,读一本关于java的书(任何java的书都可以),通读,就像你读小说一样,一周内完成。不用每个章节都读,尽可能快的过一遍。你有没有在一周内读完过一本小说?...你应该在入门算法课程中学这些而不是在学习新语言时。如果你没有入门编程语言和基本的数学技能,请先学习语言。并且不要把注意力集中在细节问题上,当你实际做项目时,你有的是时间抠细节。...A:使用现成的API,它能让你的更轻松,让你在放弃之前保持高效。为什么重新发明轮子?我使用apache commons I / O和网络库。JDK本身带有很好的数据结构,没事儿别总造轮子。...开始写更大的项目。或者只是改善你的小项目,把它做大。想想您可以在小项目中实现的新功能并执行此操作。通过相同的网站下载程序,尝试实现过滤器。基于超链接的过滤器将教您使用正则表达式。

    63040

    多线程和多进程的差别(小结)

    我想,仅仅要你不是整天都写那种int main()究竟的代码的人,那么或多或少你会遇到代码响应不够用的情况,也应该有尝过并发编程的甜头。...关于写时复制:因为一般 fork后面都接着exec,所以,如今的 fork都在用写时复制的技术,顾名思意,就是,数据段,堆,栈,一開始并不复制,由父,子进程共享,并将这些内存设置为仅仅读。...有足够权限的进程能够向队列中加入�消息,被赋予读权限的进程则能够读走队列中的消息。消息队列克服了信号承载信息量少,管道仅仅能承载无格式字节流以及缓冲区大小受限等缺点。...也许你会有疑问,那多线程间要通信,应该怎么做?前面已经说了,多数的多线程都是在同一个进程下的,它们共享该进程的全局变量,我们能够通过全局变量来实现线程间通信。...只是,在同一时候调用多进程(子进程里也调用线程函数)和多线程的情况下,函数体内非常有可能死锁。 详细的样例能够看看这篇文章。

    44730

    使用C# (.NET Core) 实现单体设计模式 (Singleton Pattern)

    请看下图: 处理多线程问题 为了解决这个多线程的问题问题, 可已使用synchronized方法: (synchronized是java里的关键字, C#的请参考下面我写的代码) 使用synchronized...还能改进多线程吗 1. 如果性能不是那么重要, 就继续使用synchronized吧. 但是要记住使用synchronized之后运行速度可能会差100倍(JVM). 2....所以如果性能是问题, 就可以使用这个方法. 其他问题 Q: 如果我创建一个类, 里面都是静态方法和静态变量, 那么它的效果和单体模式不是一样的吗?...A: 是的, 如果你类没有其他依赖并且初始化并不复杂的话. Q: 可以继承单体模式吗? A: 简单的回答就是: No. Q: 为什么单体模式比全局变量好?...A: 全局变量会污染命名空间, 当然了单体模式写不好也很烂.

    1K40

    socket是并发安全的吗

    那么,socket是并发安全的吗?能让这多个线程同时并发写吗? 并发读写socket 写TCP Socket是线程安全的吗? 对于TCP,我们一般使用下面的方式创建socket。...那么问题就来了,那是不是我在写整个完整消息之前加个锁,整个消息都写完之后再解锁,这样就好了? 类似下面这样。...读TCP Socket是线程安全的吗? 在前面有了写socket是线程安全的结论,我们稍微翻一下源码就能发现,读socket其实也是加锁了的,所以并发多线程读socket这件事是线程安全的。...我们平时写代码的时候如果要使用udp发送消息,一般会像下面这样操作。...但就算可以,我依然不建议大家这么做。 为什么不建议使用多线程同时读写同一个UDP socket udp本身是不可靠的协议,多线程高并发执行发送时,会对系统造成较大压力,这时候丢包是常见的事情。

    1.9K10

    阿里一面面经C++

    ——拿破仑 面了一个半小时,感觉嗓子都要哑了……   Q:做个自我介绍吧   A:聊项目   ……(聊了挺久)   Q:我看你这边github上有一个协程库,能介绍一下协程的概念吗?  ...A:协程,用户级,轻量,快,效率高,但是不结合多线程难以利用多核   Q:能说一下怎么实现的吗?   A:讲了一下基于ucontext怎么切换上下文   Q:协程和线程的区别?  ...Q:你写的库的对于使用者有什么优势?   A:……你可以用我的APIbalabala……   Q:给我一个用你的协程库的场景吧??   A:YY了一个轮询读文件的场景。  ...栈的维护是你自己做的吗?   A:维护每个协程的上下文。我就只需要管理这块内存就可以。不是很完善……   Q:上个读文件的场景,什么时候才会阻塞?  ...Q:如果两个都阻塞了呢?   A:那就没辙了……举了一个很多fd用epoll轮询的场景。   Q:从你个人角度有没有遇到过比较困难的场景?

    38420

    这个点,在面试中答出来很加分!

    那么,socket是并发安全的吗?能让这多个线程同时并发写吗? 并发读写socket 写TCP Socket是线程安全的吗? 对于 TCP,我们一般使用下面的方式创建 socket。...那么问题就来了,那是不是我在写整个完整消息之前加个锁,整个消息都写完之后再解锁,这样就好了? 类似下面这样。...读TCP Socket是线程安全的吗? 在前面有了写 socket 是线程安全的结论,我们稍微翻一下源码就能发现,读socket其实也是加锁了的,所以并发多线程读 socket 这件事是线程安全的。...我们平时写代码的时候如果要使用 UDP 发送消息,一般会像下面这样操作。...会有一样的问题吗? 我们跟TCP对比下,大家就知道了。 TCP不能用多线程同时读和同时写,是因为它是基于数据流的协议。 那UDP呢?它是基于数据报的协议。

    45120

    别逗了,Redis6.0多线程重磅来袭!

    多线程实现 目前对于单线程 Redis 来说,性能瓶颈主要在于网络的 IO 消耗, 优化主要有两个方向: 提高网络 IO 性能,典型的实现像使用 DPDK 来替代内核网络栈的方式 使用多线程充分利用多核...因为读写网络的read/write系统调用在Redis执行期间占用了大部分CPU时间,如果把网络读写做成多线程的方式对性能会有很大提升。...多线程 IO 的读(请求)和写(响应)在实现流程是一样的,只是执行读还是写操作的差异。同时这些 IO 线程在同一时刻全部是读或者写,不会部分读或部分写的情况,所以下面以读流程作为例子。...分析过程中只会覆盖核心逻辑而不是全部细节。如果想完全理解细节,建议看完之后再次看一次源码实现。...数据仅供验证参考而不能作为线上指标,且只是目前的 unstble分支的性能,不排除后续发布的正式版本的性能会更好。

    10.4K40

    java学习要点

    能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。...59)我们能自己写一个容器类,然后使用 for-each 循环吗? 可以,你可以写一个自己的容器类。如果你想使用 Java 中增强的循环来遍历,你只需要实现 Iterable 接口。...76)Java 中,编写多线程程序的时候你会遵循哪些最佳实践?(答案) 这是我在写Java 并发程序的时候遵循的一些最佳实践: a)给线程命名,这样可以帮助调试。...(答案) 不是,非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat...如果你认为我这里有任何应该在这份列表中而被我遗漏了的 Java 流行的问题,你可以自由的给我建议。我的目的是从最近的面试中创建一份最新的、最优的 Java 面试问题列表。

    1.3K61
    领券