Я немного застрял в проблеме множественного потребителя / производителя. Это отражено в моих лекционных заметках, но я просто не могу понять, почему подход с одним потребителем / производителем не сработает.
Типичный подход для 1 потребителя и 1 производителя выглядит следующим образом:
Producer :
while(true)
emptyBuffers.P();
mutex.P();
buffer.insert(produced item);
mutex.V();
fullBuffers.V();
Consumer :
while(true)
fullBuffers.P();
mutex.P();
buffer.consume(consumed item);
mutex.V();
emptyBuffers.V();
Почему это не сработает, если у меня более 1 производителя и / или более 1 потребителя? Я искал везде, но я не могу найти ответ, который я понимаю: s.
Семафор мьютекса гарантирует, что в буфере не работают одновременно 2 процесса, поэтому я не вижу, как это свойство может измениться, если у вас есть больше процессов ...
«Решение» заключается в том, что вы меняете мьютекс на ProducerMutex и ConsumerMutex. Но теперь это означало бы, что производитель и потребитель МОГУТ быть в буфере одновременно, что недопустимо, верно?
Я действительно не понимаю: s