处理并发读取?

时间:2014-03-15 04:14:17

标签: multithreading concurrency

我是并发编程的新手,我有一个特定的情况,我想要一些输入。如果我有一个变量,我将从多个线程访问但只读取值(唯一的原因是它不是常量是因为我需要在运行时设置它),我需要一个互斥量吗? ?或者,当只有写入共享资源时,您是否只需要担心竞争条件?

3 个答案:

答案 0 :(得分:3)

如果在之前设置值,则启动线程,则不需要互斥锁。 如果在之后设置值,则启动线程,您将需要一个互斥锁,以确保所有线程都读取相同的值。

答案 1 :(得分:2)

逻辑上,如果您只是阅读共享数据,那么您可能不需要使用互斥锁。但是,如果是大型程序,您必须使用它来避免混淆。

答案 2 :(得分:2)

这取决于你所谈论的语言和机器架构以及什么"读取变量"用那种语言表示。当"读取变量"转换为仅在机器级别从内存中读取,并发读取本身通常是安全的。当然,您需要确保程序中的任何其他内容都不会转换为写入相同的内存区域。

许多主流语言(Java,C#,C,C ++)仅对程序如何转换为内存访问提供非常微弱的保证。同时,您获得的保证倾向于采用非常复杂的规则形式,例如,关于哪些语句序列可以在何时重新排序。为了避免引入真正难以发现的错误,通常需要使用您需要的同步属性作为非细微且具体的形式,即使用互斥锁。