我可以为boost线程分配一个清理处理程序吗?

我可以为boost线程分配一个清理处理程序吗?,boost,pthreads,boost-thread,Boost,Pthreads,Boost Thread,在pthreads中,我可以使用清理句柄函数,并将它们与pthread\u cleanup\u push()。 boost线程有类似的概念吗?没有,但是您可以通过将线程函数包装到另一个函数中来模拟它,该函数调用您的函数,然后调用清理处理程序 另一种解决方案是将所需的每一个线程都添加到清理处理程序中,并将其放入线程本地存储的析构函数中。但是,如果必须为所有线程调用清理处理程序,则必须确保确实使用了这样的线程局部变量,这将归结为包装线程函数 如果要替换pthread_cleanup_push()和p

pthreads
中,我可以使用清理句柄函数,并将它们与
pthread\u cleanup\u push()。

boost线程有类似的概念吗?

没有,但是您可以通过将线程函数包装到另一个函数中来模拟它,该函数调用您的函数,然后调用清理处理程序

另一种解决方案是将所需的每一个线程都添加到清理处理程序中,并将其放入线程本地存储的析构函数中。但是,如果必须为所有线程调用清理处理程序,则必须确保确实使用了这样的线程局部变量,这将归结为包装线程函数

如果要替换pthread_cleanup_push()和pop()调用,我会选择构造函数和析构函数,所以

void roll_back( void* i );
{
   do_rollback( *(int*)i );
}

void thread()
{
    int roll_back_arg = 4;
    pthread_cleanup_push( &roll_back, &roll_back_arg );

    // transaction

    pthread_clean_up_pop( 0 );
}
可译为:

struct roll_back_guard
{
    roll_back_guard( int arg  ) : arg_( arg ), commit_( false ) {}

    void commit() {
        commit_ = true;
    }

    ~roll_back_guard() {
        if ( !commit_ )
            do_rollback( arg_ );
    }
};

void thread()
{
    roll_back_guard guard( 4 );

    // transaction
    guard.commit();
}

通常称为范围保护。< /P>我试图把代码从C移到C++,并希望使用Booo::线程。该代码使用<>代码> pthRead CuffuPuthPub()/<代码>和 PthRead CuffuPUpPo.()/Cux>环绕线程的主代码。@ TypPy在C++中以{}包围此代码,并将上述“范围保护”对象定义放在块的开头。