Безопасность потоков для очереди STL

Я использую очередь для связи между потоками. У меня есть один читатель и несколько писателей. У меня вопрос: нужно ли блокировать очередь каждый раз, когда я использую 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 () в замок?

19
задан Melebius 15 August 2017 в 10:04
поделиться