【发布时间】:2026-02-19 16:30:01
【问题描述】:
我们正在努力为 Game of life 找到一个好的同步。
因此,我们有一个打印机线程和当前两个线程来计算接下来要打印的新一代单元格。
计算线程只有在旧的已经打印出来的情况下才能开始计算新一代的游戏。
因此,我们使用打印机线程中的pthread_cond_signal(),它应该唤醒两个计算线程。
由于某种原因,只有一个线程在 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。
我们觉得我们仍然没有真正了解如何正确使用互斥锁。
【问题讨论】:
标签: c multithreading pthreads posix