c - 很难理解消费者生产者问题中的一个问题

标签 c operating-system semaphore

我真的很难理解消费者生产者问题中的一个问题,例如下图中关于消费者的简单结构:

enter image description here

我的大问题是,在 wait(mutex) 和 signal(mutex) 中,参数 mutex 对两者都是相同的,所以如果 signal(mutex) 被阻塞但在 wait( full) 和 signal(empty) 它们传递不同的参数,所以 signal(empty) 如何唤醒 wait(full) ??????(值得注意的是,我们假设 full 和 empty 都是信号量类型)

这里有一些可能有用的信息:

semaphore enter image description here

enter image description here

生产者的代码也是:

enter image description here

最佳答案

互斥信号量处理避免对某些共享资源的相互访问,满信号量和空信号量处理何时允许生产者和何时允许消费者运行。这完全取决于信号量的设置,但基本上 full 应该设置为在消费者第一次等待时阻塞,empty 应该在消费者第一次等待时可用。

然后生产者将处理数据并在完整的信号量上发布,这反过来又会解除对消费者任务的阻塞。消费者将阻塞下一个空等待,直到生产者发布空信号量,依此类推,直到无穷大或程序结束。

关于c - 很难理解消费者生产者问题中的一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483010/

相关文章:

c - fscanf 的输出未按预期出现

c - C 和 strcpy 中的字符串指针数组

c - ARM 处理器是否可行?

Android 应用程序不是从快捷方式启动

java - 临时文件夹被创建为临时文件

c - 如果 sem_init() 被调用两次会发生什么?

c - 将 noreturn 属性应用于宏函数调用

c - 为什么我可以分配一个超出其范围的 int 值?

c - 在 C 中使用信号量和互斥锁实现生产者-消费者

java - 使用信号量