可以在构造函数中创建Pthread吗?

cpp*_*ame 2 c++ multithreading constructor pthreads threadpool

我想创建一个线程池.我有一个名为ServerThread.cpp的类,其构造函数应该执行以下操作:

ServerThread::ServerThread()
   {
         for( int i=0 ; i<init_thr_num ; i++ )
         {
              //create a pool of threads
              //suspend them, they will wake up when requests arrive for them to process
         }
   }
Run Code Online (Sandbox Code Playgroud)

我想知道在构造函数中创建pthreads是否会导致任何应该避免进入的未定义行为.

谢谢

ser*_*gio 5

您当然可以在构造函数中执行此操作,但应该了解Scott Meyers在其有效/更有效的C++书籍中明确解释的问题.

简而言之,他的观点是,如果在构造函数中引发任何类型的异常,那么您的半支持对象将不会被销毁.这会导致内存泄漏.因此,迈耶斯的建议是拥有"轻"构造函数,然后init在完全创建对象后调用的方法中执行"繁重"工作.

这个参数与在构造函数中创建pthreads池没有严格的关系(你可能会认为如果你只是创建它们然后立即挂起它们就不会引发异常),但是关于在构造函数中做什么的一般考虑因素(阅读:良好做法).

要做的另一个考虑因素是构造函数没有返回值.虽然确实(如果没有抛出异常),即使线程创建失败,也可以使对象保持一致状态,从一种init或多种start方法管理返回值可能会更好.

您还可以在SO上阅读关于该主题的这个帖子,以及这个主题.