我正在尝试调试多线程系统,为此我需要记录向量的内容一段时间(1小时)。
我想打印vector<concurrent_queue<MyObject>*> myContainer
中包含的所有字符串,我尝试了以下内容:
for (auto q : myContainer)
for(concurrent_queue<MyObject>::iterator i = q->unsafe_begin(); i != q->unsafe_end(); ++i)
cout << i->toString()<<endl;
但是我在Visual Studio
中运行了几次后得到了一个调试断言:
msvcp110d.dll!Concurrency::details::_Concurrent_queue_iterator_rep::choose(unsigned __int64 k) Line 339 C++
我认为这是由竞争条件导致的访问违规造成的。
如何在没有问题的情况下正确迭代此类结构?