关键部分中的C++异常处理(pthreads)

psu*_*lue 2 c++ mutex exception pthreads

[编辑:(从评论中复制)事实证明,问题出在其他地方,但谢谢大家的意见.]

我有一个共享容器类,它使用一个互斥锁来锁定push()和pop()函数,因为我不想同时修改head和tail.这是代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

当我在调试模式下运行它时,一切都很好.当我在发布模式下运行时,我大致在驱动程序开始推送和"同时"弹出时崩溃.如果try/catch块捕获到std :: bad_alloc异常,它会立即强制退出吗?如果是这样,我应该将函数的其余部分包含在finally块中吗?

此外,较慢的调试模式是否可能成功,因为我的push()和pop()调用从未实际发生过?

Nik*_*sov 8

在C++中,我们使用资源获取初始化(RAII)来防范异常.


Han*_*ant 5

在异常之后这实际上是爆炸吗?你的代码片段更有可能是你的同步不好.首先是互斥锁的名称:"writeMutex".如果还有"readMutex",这将不起作用.所有读取,查看和写入操作都需要由同一个互斥锁锁定.