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