У меня есть следующий сценарий чтения-записи:
- Писатель зажигает читателя.
- Устройство чтения вращается бесконечно и начинает чтение из общего буфера после записи в него.
- Писатель начинает запись в общий буфер
- Писатель ждет, пока читатель закончит чтение.
- программа заканчивается.
Псевдокод - предположим, что все потокобезопасно:
// shared buffer
var buffer = new [3];
// 1. fire a thread, pass it a function named read
thread reader = new thread(read);
// 2. write some text to a shared buffer
var source = new [] {"line 1", "line 2", "line 3"};
for (int i = 0; ++i; i< source.length) {
buffer[i] = source[i];
}
// 3. wait for reader to finish consuming the buffer
reader.join();
// 4. reader function
function void read() {
while (true) {
while (!buffer.empty()) {
for (int i = 0; ++i; i< buffer.length) {
print(buffer[i]);
}
}
}
}
Мой вопрос: как заставить читателя выйти из его бесконечного цикла?
Я знаю, что это классическая проблема, но не смог найти ресурс, который занимается этим. Все, что я видел, связано с различными типами замков, что меня не интересует (как было сказано - предположим, что все потокобезопасно).