我对并发编程还不熟悉,我想到了一个特定的情况,我想要一些投入。如果我将从多个线程访问一个变量,但只读取该值(它不是常量的唯一原因是因为我需要在运行时设置它),那么是否需要一个互斥变量呢?或者,您只需要担心在也有写到共享资源时的争用条件?
发布于 2014-03-15 04:28:47
如果在启动线程之前设置了值,则不需要互斥对象。如果在启动线程后设置值,则需要互斥以确保所有线程都读取相同的值。
发布于 2014-03-15 08:07:30
这取决于您所说的语言和机器体系结构,以及在该语言中“读取变量”意味着什么。当“读取变量”转换为仅从机器级的内存读取时,并发读取本身通常是安全的。当然,您需要确保您的程序中没有任何其他内容可以转换为相同的内存区域。
许多主流语言(Java、C#、C、C++)对程序如何转换为内存访问提供了非常弱的保证。同时,你得到的保证往往以非常复杂的规则的形式出现,比如说,在什么时候,哪些语句序列可能被重新排序。为了避免引入真正难以找到的bug,通常最好是要求您所需的同步属性尽可能地不精细和具体化,即使用互斥。
https://stackoverflow.com/questions/22419435
复制相似问题