我在 C++ 中有一个奇怪的问题,这段代码:
mutex_type list_mutex;
typedef list<char*> RQueue;
RQueue rQueue;
RQueue::reverse_iterator rstart, rend, last;
1 while(true) {
2 LockMutex(list_mutex);
3 rstart = rQueue.rbegin();
4 rend = rQueue.rend();
5 while( (rstart != rend) && (rstart != last) ) {
6 print *rstart;
7 }
8 last = rQueue.rbegin();
9 UnlockMutex(list_mutex);
10 }
rQueue
是一个队列,我在其中以相反的顺序迭代rQueue
可以随时接收消息- 我添加了迭代器
last
以避免在第 6 行重新处理接收消息 在第 8 行,我保留了打印消息的位置,并且我只想打印比上一条消息更新的消息。
我的问题:当迭代完成并在队列中添加新消息时,迭代器的值
last
会改变,与迭代器的值相同rstart
,因此新到达的消息不会在第 6 行打印。
我不知道为什么last = rQueue.rbegin()
在解锁队列后接收新元素时会修改其值。
谢谢。