我在C中有一个多线程应用程序 - 有3个线程并且为了防止同步问题/死锁我正在使用信号量和互斥锁。 1个线程是消费者,1个线程是生产者,1个线程是监视器,它输出消费者/生产者线程更新的值。初始化的信号量
sem_init(&empty, 0, 10);
sem_init(&full, 0, 0);
数据在生产者中通过
同步//decide to go into critical section
sem_wait(&empty);
pthread_mutex_lock(&mutex);
Attempt_Park();
/* release locks */
pthread_mutex_unlock(&mutex);
/* signal full */
sem_post(&full);
与消费者类似。但是我不知道如何使用显示器线程输出当前数据(链接列表)的信号量 - 目前我只使用互斥锁但我知道最终它会成为一个问题
//user presses enter
/* Acquire lock */
pthread_mutex_lock(&mutex);
//output data to screen
由于此线程不参与更改数据,因此无法使用信号量使线程等待,但生产者或消费者可以在监视器线程写入屏幕时更改数据。我应该使用二进制信号量吗?如果是这样,我无法弄清楚如何应用它。
答案 0 :(得分:0)
仅在生产者或消费者线程修改数据时才使监视器线程运行。无需担心监视器线程的锁定机制。使用信号机制唤醒线程以输出数据
答案 1 :(得分:0)
没有太多锁定会降低您的性能。根据您的要求考虑一个互斥量应该足够,因为只有生产者和消费线程才会进入关键部分。