读书人

大牛解答(queue 双端队列)

发布时间: 2013-03-04 17:22:12 作者: rapoo

高分求教大牛解答(queue 双端队列)
源码片段如下:


EnterCriticalSection(&recvStockHeadListCriSection);
if(!lpPerHandleContext->recvStockHeadList.empty())
{
if(lpPerHandleContext->recvStockHeadList.size() > 1
&& lpPerHandleContext->recvStockHeadList.front().io_data_type == IO_DATA_ACCPET)
{

}

}
LeaveCriticalSection(&recvStockHeadListCriSection);


断点一步一步走;
recvStockHeadList 非空
recvStockHeadList.size() 等于 5
recvStockHeadList.front() 错误

这是为啥??? 多线程环境!在这个子线程中recvStockHeadListCriSection关键块,在主线程中对变量的赋值lpPerHandleContext 也有一个关键块控制
[解决办法]
错误信息是什么
[解决办法]
如果有其他线程在其他地方修改队列,你这里的CS是保护不了滴~~~~~
[解决办法]
EnterCriticalSection(&recvStockHeadListCriSection);
LeaveCriticalSection(&recvStockHeadListCriSection);

是封到recvStockHeadList面更好,

或者是直接找支持多程的queue

[解决办法]
主线程关键块也要用recvStockHeadListCriSection才行。你是不是在主线程里用了另外一个CRITICAL_SECTION。
[解决办法]
引用
EnterCriticalSection(&recvStockHeadListCriSection);
LeaveCriticalSection(&recvStockHeadListCriSection);

是封到recvStockHeadList面更好,

或者是直接找支持多程的queue
插入和pop时需要上锁迭代器失效了 多线程操作。。。

读书人网 >C++

热点推荐