Implementieren des Blockierens von Lesevorgängen mithilfe von POSIX-Threads
Ich möchte ein Produzenten- / Konsumentenszenario implementieren, das sich an Schnittstellen orientiert, die ungefähr wie folgt aussehen:
class Consumer {
private:
vector<char> 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<char> &more) {
// Safely queue the data
// Notify `read` that there is now more data
}
};
In diesem Fall,feed
undrun
läuft auf separaten Threads undread
sollte ein blockierender Lesevorgang sein (wierecv
undfread
). Offensichtlich brauche ich eine Art gegenseitigen Ausschluss für meine Deque, und ich brauche eine Art Benachrichtigungssystem, um zu informierenread
nochmal versuchen.
ich höreBedingungsvariablen sind der Weg zu gehen, aber alle meine Multithreading-Erfahrung liegt bei Windows und es fällt mir schwer, meinen Kopf um sie zu wickeln.
Danke für jede Hilfe!
(Ja, ich weiß, dass es ineffizient ist, Vektoren zurückzugeben. Lassen Sie uns nicht darauf eingehen.)