2014-11-06 37 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