Я использую очередь для связи между потоками. У меня есть один читатель и несколько писателей. У меня вопрос: нужно ли блокировать очередь каждый раз, когда я использую push / front / pop из очереди для читателя? Могу ли я сделать что-то вроде следующего:
//reader threads
getLock();
get the number of elements from the queue
releaseLock();
int i = 0;
while( i < numOfElements){
queue.front();
queue.pop();
i++
}
Идея состоит в том, что я хочу уменьшить степень детализации заблокированного кода, и поскольку поток записи будет писать только в конец очереди, а существует только один поток чтения. Пока я получаю количество элементов, тогда я мог бы получить элементы из очереди ИЛИ мне нужно заключить front ()
и pop ()
в замок?