Скажите, что я реализую модель производитель-потребитель. Производитель и потребитель совместно используют буфер, который является критическим регионом. Производитель хочет выполнить запись в буфер, а потребитель - из него.
Для простоты в этом примере используется двоичный семафор, в котором только один поток может одновременно обращаться к буферу. Типично ли, чтобы семафор был частью класса производитель / потребитель, или они должны быть частью класса буфера?
// Producer class
class Producer implements Runnable {
Buffer buffer;
... more code
}
// Buffer class
class Buffer {
Deque<Integer> buffer;
private final Semaphore producerSemaphore;
private final Semaphore consumerSemaphore;
... more code
}
против
// Producer class
class Producer implements Runnable {
Buffer buffer;
private final Semaphore producerSemaphore;
... more code
}
// Buffer class
class Buffer {
Deque<Integer> buffer;
... more code
}