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
條件變量的重點在於避免主動等待。 –