Хотелось бы узнать, есть ли способ реализовать потребителя-производителя
Конечно, просто не будет эффективным или особенно быстрым.
void producer()
{
while (1) {
lock();
while (q_has_space()) produce_one_item();
unlock();
sleep(); // The longer you sleep, the less CPU you burn, but the longer the
// delay between consumer freeing up space and producer putting more
// items in the queue.
}
}
void consumer()
{
while (1) {
lock();
while (q_has_items()) consume_one_item();
unlock();
sleep(); // Same considerations as in producer
}
}
Вышеупомянутый псевдокод имеет дополнительные недостатки: и produce
, и consume
работают внутри блокировки, что обычно очень неоптимально. Исправление оставлено читателю в качестве упражнения.