gpt4 book ai didi

c - 信号量互斥锁防止死锁 - C 程序

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:19 25 4
gpt4 key购买 nike

我有一个 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

由于此线程不涉及更改数据,我无法使用信号量让线程等待,但生产者或消费者可以在监视线程写入屏幕时更改数据。我应该使用二进制信号量吗?如果是这样,我不知道如何应用它。

最佳答案

只需让监控线程仅在生产者或消费者线程修改数据时运行即可。无需为监控线程的锁定机制操心。使用信号机制唤醒线程以输出数据

关于c - 信号量互斥锁防止死锁 - C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18672306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com