2009-10-25 50 views
0

我正在开发一个类,它可以在main()被调用之前实例化。我有一个由互斥体保护的关键部分就是代码。不幸的是,应用程序在AIX上失败,因为代码在线程初始化之前被调用。我想在代码中添加一个检查以避免线程未准备好时的互斥锁定,并在线程初始化后使用锁定。如何检查线程管理初始化是否完成?

我在AIX 5.3工作与IBM XL C/C++ v.8.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(); 
} 
+0

我无法实现您的解决方案,因为我无法访问main()。我需要一个库调用来告诉我线程初始化是否完成。 问题是如何获取该信息,而不是存储在哪里。 – GMichael 2009-10-25 16:03:15

相关问题