如何检查线程管理初始化是否完成?

时间:2009-10-25 10:31:16

标签: multithreading mutex aix

我正在开发一个类,可以在调用main()之前实例化它。我有一个由互斥锁保护的关键部分是代码。遗憾的是,应用程序在AIX上失败,因为在初始化线程之前调用了代码。我想在代码中添加一个检查,以避免在线程未准备好时进行互斥锁定,并在线程初始化后使用锁定。

我使用IBM XL C / C ++ v.8.0

在AIX 5.3上工作

1 个答案:

答案 0 :(得分:0)

您可以使用这样的全局布尔:

bool main_called = false;

class AClass {
   AClass()
   {
       if (main_called) mutex_aquire();
       ...
       if (main_called) mutex_release();
   }
};

int main()
{
    main_called = true;
    ...
}

但是,您对实施的描述显示出糟糕的设计迹象。尝试避免全局变量,或者至少尝试在调用main之后初始化它们:

AClass *aclass;

int main()
{
    aclass = new AClass();
}