2014-11-06 87 views
0

我有两个线程共享一个变量,但他们都没有写入该变量。我明白,当两个线程动态读取或写入变量时,您确实需要一个互斥量。但是,既然我只是从两个线程中读取共享变量,我是否仍然需要使用互斥锁?在我的情况下需要互斥体

P.S.我是一个C++程序,我使用std :: mutex。

+1

你不需要一个互斥(或任何其他同步)只为阅读。 – Jon 2014-11-06 23:12:05

+0

我没有downvote,但我想他/她希望你提供一个示例代码,以便我们可以给出更好的答案。例如一个int变量不需要锁,但long long会长 – Steve 2014-11-06 23:37:25

回答

2

如果保证变量不被更改,则读取不需要互斥锁。

但如果:

  1. 这有可能是该变量在同一时间你的线程试图读取它
  2. 写(任何线程),并读取/写入不是原子

然后你确实需要同步。

+0

变量不会处于半写入状态......它正受硬件级内存访问保护 – Steve 2014-11-06 23:17:01

+0

取决于变量的类型。这是C++记住。 – tenfour 2014-11-06 23:17:40

+0

不管它是什么语言,它受硬件保护 – Steve 2014-11-06 23:18:11

1

只要他们只从变量中读取数据,并且变量可以用一个存储/读取字操作进行写入/读取,那么您就不会。

+1

...并且在两个线程从它读取时没有其他线程写入该变量......并且只要没有可变内部变化的成员该对象作为读取的一部分。 – 2014-11-07 02:01:21