Sto utilizzando una coda per comunicare tra thread. Ho un lettore e più thread di scrittore. La mia domanda è: ho bisogno di bloccare la coda ogni volta che uso push/front/pop dalla coda per il lettore? Posso fare qualcosa di simile al seguente:Sicurezza thread per coda STL
//reader threads
getLock();
get the number of elements from the queue
releaseLock();
int i = 0;
while(i < numOfElements){
queue.front();
queue.pop();
i++
}
L'idea è che voglio ridurre la granularità del codice chiuso e poiché il thread di scrittura avrebbe scritto solo per la parte posteriore della coda e c'è solo un unico lettore filo. Finché ottengo il numero di elementi, allora potrei ottenere gli elementi dalla coda O devo includere lo front()
e pop()
anche nel blocco?
C++ 0x ha Atomics, quindi consente programmatori di scrivere senza blocchi (algoritmo thread-safe) e fornisce standard mutex, ma non ha nulla di pronto all'uso. – GManNickG