如果沒有其他線程使用變量標誌,確保主線程永遠不會錯過喚醒信號,這是否安全?確保不會丟失cond信號的安全方法
void *Cancel_master_thread(void *arg)
{
while (1)
{
flag = 0;
pthread_mutex_lock(&cancel_in_progress);
flag = 1;
pthread_cond_wait(&cancel_finished, &cancel_in_progress);
pthread_mutex_unlock(&cancel_in_progress);
}
}
void *Cancel_slave_MB()
{
while (1)
{
while (flag != 1)
{
}
pthread_mutex_lock(&cancel_in_progress);
pthread_cond_signal(&cancel_finished);
pthread_mutex_unlock(&cancel_in_progress);
}
}
但我要的是什麼時候睡覺主來自奴隸的信號到達。所以當標誌值爲1時,主機會休眠,只有從機才能鎖定互斥併發送信號。不是嗎?對於多處理器系統,線程是同時執行的。那麼問題在哪裏?我忘了提到,解鎖互斥體cancel_in_progress後奴隸睡覺,我只是沒有在發佈的代碼中結束pthread_cond_wait命令。 – iiirxs
是的,他們執行很長一段時間,但不知何故主線程不喚醒,所以一切都停止... – iiirxs