Как реализовать блокировку чтения с использованием потоков 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, и мне тяжело оборачиваться вокруг них.
Спасибо за любую помощь!
(Да, я знаю его'неэффективно возвращать векторы. Позволять'не попасть в это.)