是std :: list线程安全吗?我假设它不是,所以我添加了我自己的同步机制(我认为我有合适的期限)。但我仍然遇到问题std :: list线程push_back,前面,pop_front
每个函数都由一个单独的线程调用。线程1等不及了,它必须尽可能快地
std::list<CFoo> g_buffer;
bool g_buffer_lock;
void thread1(CFoo frame) {
g_buffer_lock = true ;
g_buffer.push_back(frame) ;
g_buffer_lock = false;
}
void thread2()
{
while(g_buffer_lock) {
// Wait
}
// CMSTP_Send_Frame * pMSTPFrame = NULL ;
while (! g_buffer_lock && g_buffer.size() > 0)
{
// Get the top item
CFoo& pFoo = g_buffer.front() ;
// Do something.
// remove the front item
g_buffer.pop_front();
}
}
经过约170,000调用线程1和900K调用线程2我对CFoo& pFoo = g_buffer.front() ;
这会导致程序崩溃得到一个异常错误。 stdthrow.cpp:22
#ifdef _DEBUG
_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message(const wchar_t *message, const wchar_t *file, unsigned int line)
{ // report error and die
if(::_CrtDbgReportW(_CRT_ASSERT, file, line, NULL, message)==1)
{
::_CrtDbgBreak();
}
}
_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message(const unsigned short *message, const unsigned short *file, unsigned int line)
{ // report error and die
_Debug_message((wchar_t *) message, (wchar_t *) file, line);
}
#endif
建议,意见,是否有更好的做事方式?
是std :: list线程安全吗? No. – KeatsPeeks 2009-12-03 22:48:57