我正在使用队列来在线程之间通信。我有一个读取者和多个写入者线程。我的问题是,当我为读取者使用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()
吗?