0
3消费者2生产者。读取和写入一个缓冲区。 生产者A推动1个元素缓冲(长度N),生产者B推动2个元素缓冲。没有主动等待。我不能使用System V信号量。对于A公司生产者 - 消费者生产者创造2个要素POSIX信号灯
示例代码:
void producerA(){
while(1){
sem_wait(full);
sem_wait(mutex);
Data * newData = (Data*) malloc(sizeof(Data));
newData->val = generateRandomletter();
newData->A = false;
newData->B = false;
newData->C = false;
*((Data*) mem+tail) = *newData;
++elements;
tail = (tail + 1) % N;
sem_post(mutex);
sem_post(empty);
}
}
消费者看起来很相似,除了他们阅读或消耗但是这无关紧要。 我有很多与制片B.麻烦很明显,我不能做这样的事情
sem_wait(full); sem_wait(full);
我也试过具有生产B中的不同信号将被调升第一次有2个或更多的自由在缓冲区中的斑点。但是这并没有奏效,因为我仍然需要适当降低和增加信号量full
和empty
。
我可以通过哪些方式解决此问题?
条件变量在我看来是你需要的技术。 –
由于我在这个过程中不能有任何主动等待,这意味着我无法在循环的每次迭代中检查一个条件。如果你有更聪明的东西,我会很感激。 – Aaroneiros
条件变量的重点在于避免主动等待。 –