【发布时间】:2010-01-06 21:42:59
【问题描述】:
[编辑:(从评论中复制)事实证明,问题出在其他地方,但感谢大家的意见。]
我有一个共享容器类,它使用单个互斥锁来锁定 push() 和 pop() 函数,因为我不想同时修改头部和尾部。代码如下:
int Queue::push( WorkUnit unit )
{
pthread_mutex_lock( &_writeMutex );
int errorCode = 0;
try
{
_queue.push_back( unit );
}
catch( std::bad_alloc )
{
errorCode = 1;
}
pthread_mutex_unlock( &_writeMutex );
return errorCode;
}
当我在调试模式下运行它时,一切都很好。当我在发布模式下运行时,大约在驱动程序开始“同时”推送和弹出时发生崩溃。如果 try/catch 块捕获到 std::bad_alloc 异常,它会立即强制退出吗?如果是这样,我应该将函数的其余部分包含在 finally 块中吗?
另外,较慢的调试模式是否可能仅因为我的 push() 和 pop() 调用实际上从未同时发生而成功?
【问题讨论】:
-
崩溃的性质是什么?你也可以发布
pop()函数吗?
标签: c++ exception mutex pthreads