Как реализовать блокировку чтения с использованием потоков POSIX

Я хотел бы реализовать сценарий производитель / потребитель, который подчиняется интерфейсам, которые примерно:

class Consumer {
private:
    vector read(size_t n) {
        // If the internal buffer has `n` elements, then dequeue them
        // Otherwise wait for more data and try again
    }
public:
    void run() {
        read(10);
        read(4839);
        // etc
    }
    void feed(const vector &more) {
        // Safely queue the data
        // Notify `read` that there is now more data
    }
};

В этом случае,feed а такжеrun будет работать на отдельных потоках иread должно быть блокирующее чтение (какrecv а такжеfread). Очевидно, мне понадобится какое-то взаимное исключение на моем deque, и мне понадобится какая-то система уведомлений для информированияread попробовать еще раз.

я слышупеременные условия это путь, но весь мой опыт многопоточности связан с Windows, и мне тяжело оборачиваться вокруг них.

Спасибо за любую помощь!

(Да, я знаю его'неэффективно возвращать векторы. Позволять'не попасть в это.)

Ответы на вопрос(6)

Ваш ответ на вопрос