我们正在尝试为生命游戏找到一个很好的同步。第二个线程不会从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