Можно ли реализовать потребителя производителя, используя только мьютекс без условных переменных? - PullRequest
0 голосов
/ 19 апреля 2020

Я хотел бы знать, есть ли способ реализовать потребителя-производителя с помощью phtreads в c, используя только pthread_mutex переменные для управления доступом к буферу, который должен иметь конечный размер N, использование phtread_cond переменных не допускается ,

Я прочитал на другом форуме сообщение от 2016 года, где кто-то заявил, что было решение (я думаю, оптимальное) с использованием трех мьютексов, я хотел бы найти это решение, если оно действительно существует. Однако любое решение, использующее только мьютекс (столько, сколько необходимо), будет действительным.

ссылка на этот пост https://softwareengineering.stackexchange.com/questions/333215/producer-consumer-problem-with-2-mutexes

1 Ответ

0 голосов
/ 19 апреля 2020

Хотелось бы узнать, есть ли способ реализовать потребителя-производителя

Конечно, просто не будет эффективным или особенно быстрым.

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 работают внутри блокировки, что обычно очень неоптимально. Исправление оставлено читателю в качестве упражнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...