2011-11-23 57 views
3

假設我在內存中有一個數據結構S. S很複雜,比如樹或圖。我有兩個線程穿過S,他們可能會碰到並嘗試同時讀取相同的地址。我的問題是:是否有任何在這一點上的隱式鎖定的類型,使線程之間的爭用產生?如果它是有價值的,我在普通的SMP機器上使用C,pthreads。閱讀是否涉及多線程應用程序中的任何鎖定?

回答

3

不需要使用只讀操作進行鎖定。

如果你明確地實現它,只會有鎖定。這通常會在另一個線程同時修改(寫入)結構的時候完成。

0

如果沒有修改,讀取總是線程安全的。

0

首先,在C中沒有隱式鎖定。C是一個「這裏是繩索」語言,因爲你總是可以自由地掛上自己。

此外,請注意,沒有鎖定的閱讀是安全的,當你是從來沒有寫作。如果你改變了這些數值,那麼讀數可能會導致你錯誤的數值。

最後,兩個很酷的工具可幫助您決定在不確定時是否需要鎖定DRD和helgrind(valgrind工具)。這兩種都是線程工具,可以檢測各種線程相關的錯誤。只要知道他們會在敏感方面犯錯。

相關問題