2013-01-14 75 views

回答

16

如果您使用std::condition_variable_any,則可以使用任何類型的支持Lockable概念的對象。

然而,在遞歸互斥的情況下,你必須確保定線程只鎖定遞歸互斥體一次,因爲條件變量只會在等待期間使用unlock方法上unique_lock一次。

+2

「您必須確保給定線程只鎖定遞歸互斥鎖一次」 - >這意味着您無法在遞歸互斥鎖上使用條件,不是嗎?我的意思是條件的目的是與其他線程同步,如果在等待期間不保證互斥鎖被解鎖,那麼這將不起作用。 –

+0

@HugoMaxwell這取決於你的用例。如果你知道你的鎖只有1級,那麼你可以在條件下使用它。例如,如果互斥量的遞歸性質僅用於條件的信號端,則它將正常工作。 –

2

你可以用std::condition_variable_any做到這一點,它可以採取任何類型的可鎖定,但普通std::condition_variable專門爲std::unique_lock<std::mutex>

相關問題