1
這是一個使用C++類thread
的實驗。條件變量是否爲互斥鎖提供優先級?
初始條件(ICS):
- 線程A具有被一個鎖等待條件變量(在互斥)。
- 線程B鎖定了互斥鎖。
- 線程C沒有做任何事情。
現在線程C調用m.lock()
(創建鎖時)。之後,線程B通知條件變量。線程A是否正在等待該互斥鎖上的一個條件變量等待的事實使得它首先鎖定互斥鎖還是線程C的可能性更大或更小?
這裏是我的意思的例子:
#include <condition_variable>
#include <mutex>
#include <thread>
std::condition_variable cv;
std::mutex m;
void funcB()
{
std::unique_lock<std::mutex> B_lk(m);
sleep(2); // allow thread C to attempt lock; IC-2
cv.notify_one();
B_lk.unlock();
}
void funcC()
{
sleep(1); // allow thread B to lock; IC-3
std::unique_lock<std::mutex> C_lk(m);
/* Perform task C */
}
int main (int argc, char* argv[]) // thread A
{
std::unique_lock<std::mutex> A_lk(m);
std::thread threadB(funcB);
std::thread threadC(funcC);
cv.wait(A_lk); // IC-1
/* Perform task A */
/* Clean up and return */
}
我覺得線程A和C(理論上,反正)同樣有可能鎖定線程B後的互斥解鎖,因爲我沒有看到任何提及在C++標準中的優先級。我讀過關於鎖定優先級的許多其他問題,但我找不到解決這個特定問題的任何問題。
對,這就是我讀的。解除阻止,但並不一定意味着線程可以鎖定。只是問了這個問題,以確定我沒有失去任何東西。 – Cerran