bool flag=false;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond=PTHREAD_COND_INITIALIZER;
void function1()
{
pthread_mutex_lock(&mutex);
while(!flag)
{
//#2
pthread_cond_wait(&cond,&mutex);
}
pthread_mutex_unlock(&mutex);
}
void function2()
{
flag=true;
pthread_cond_signal(&cond);
}
以下是情況。兩個線程:thread1和thread2分別在function1和function2上運行。pthread_cond_wait()前檢查標誌
由於CPU時間安排,thread1停在#2處。
thread2開始執行並將標誌更改爲true。
thread1開始等待,但它會永遠等待。
如何在不鎖定互斥鎖的情況下通知其他線程的情況下避免這種情況。
你能否詳細說明一下?你的目的不明確 – Saksham
你正在調用未定義的行爲,通過訪問'flag'而沒有同步。 –