2014-01-12 55 views
10

atomic::is_lock_free返回true時,是否存在正確且無死鎖的C++程序,但未定義或當atomic::is_lock_free返回false時可能包含死鎖?關於鎖的std :: atomic的實現可以將程序的行爲從正確變爲不正確嗎?

由於內部原子的任何鎖將被收購和圖書館的控制下發布的,我無法想象如何將事情搞砸的時候,但隨着多線程和鎖通常有:-)

+0

我不認爲原子操作的語義應該根據is_lock_free()是否返回true或false來改變。 'is_lock_free()'只會說明原子是如何實現的。所以我會去「不」。 –

+0

同意;我無法看到任何定義語義的段落,該段落的條件取決於此函數的返回值(或等效條件)。 –

+1

請注意,「無鎖」技術上表示只要至少有一個線程被調度,一組協作線程是否保證進行。所以如果一個算法必須是無鎖的,那麼使用非鎖定的'std :: atomic'會導致它不正確。但是,它不會導致它陷入僵局。 –

回答

2

的方式在爲了在程序中產生死鎖,您需要同時保存多個鎖。訪問或修改std::atomic<T>變量可能會根據C++ 11標準獲取鎖定,但只要函數調用完成,就會釋放鎖定,並且在鎖定時不會調用任何用戶定義的函數,因此您不能擁有兩個(或更多)互斥鎖同時鎖定的情況;因此內部可鎖定對象不會發生死鎖。