2015-07-02 88 views
1

我進入了需要在兩個處理線程之間鎖定資源(std::queue)的情況。C++ std :: lock和std :: unique_lock之間有什麼區別?

第一個線程需要push數據到std::queue,而第二個線程要去pop那個數據出隊列並處理它。

我需要確保兩個線程不會爲我的std::queue競爭。

由於這是用C++鎖我的第一次,我到了不同的方法:std::lockstd::unique_lock,但我不知道該選擇哪一個?

是什麼std::lockstd::unique_lock之間的差異應該如何使用它們。

感謝您的幫助。

回答

6

std::lock算法,在避免死鎖的一種特定的方式一次性全部鎖定一個集合可鎖定對象的。

std::unique_lock是類模板,它包裝互斥,並且可以用作範圍的鎖定擋板,類似於std::lock_guard,但比後者(它本身可鎖定的,可以在早期被解鎖並可以到處移動)更加強大。

您可能不想要這些,而只是使用舊的std::lock_guard

+0

特別是,'std :: lock'通常與'std :: defer_lock'構造的一堆'unique_lock'一起使用。 –

相關問題