我可以为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++中以{}包围此代码,并将上述“范围保护”对象定义放在块的开头。