¿Está seguro el hilo de std :: list? Supongo que no es así. Agregué mis propios mecanismos de sincronización (creo que tengo el término correcto). Pero todavía estoy teniendo problemasstd :: list threading push_back, front, pop_front
Cada función es llamada por una secuencia separada. Thread1 no puede esperar, tiene que ser lo más rápido posible
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();
}
}
Después de unos 170k llamadas a Thread1 y 900k llama a Thread2 me sale un error de excepción en CFoo& pFoo = g_buffer.front() ;
Eso hace que el programa se bloquee. 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
sugerencias, comentarios, hay una mejor manera de hacer las cosas?
¿Está seguro el hilo de std :: list? No. – KeatsPeeks