我們正在嘗試爲生命遊戲找到一個很好的同步。第二個線程不會從cond_wait中喚醒
因此,我們有一個打印機線程和當前有兩個線程計算下一個要打印出來的新一代單元。
計算線程只能開始計算新一代的遊戲,如果舊的已經打印。
因此,我們使用從應該喚醒兩個計算線程的打印機線程。
出於某種原因,只有一個線程在pthread_cond_wait()
我們已經嘗試使用廣播,而不是信號醒來,但沒有任何效果。
這是我們的打印機線程做什麼:
field -> printed = true;
//pthread_mutex_unlock(&(field -> print_mutex));
int status = pthread_cond_signal(&(field -> print_signal));
這就是我們的計算線程做:
while(!field -> printed){
printf("waiting for print_signal: %d\n", field -> printed);
pthread_mutex_unlock(&(field -> print_mutex));
pthread_cond_wait(&(field -> print_signal), &(field -> print_mutex));
printf("print_signal received: %d\n", field -> printed);
}
printf("print_signal received2: %d\n", field -> printed);
pthread_mutex_unlock(&(field -> print_mutex));
然後計算線程做他們的計算,等到每個線程完成他們成立之前字段 - >打印回false。
我們覺得我們仍然不太瞭解如何正確使用互斥鎖。
非常感謝!一切工作現在完美:) – Meowzen