我正在开发一个类,可以在调用 main() 之前对其进行实例化。我有一个受互斥锁保护的关键部分是代码。不幸的是,应用程序在 AIX 上失败,因为代码在线程初始化之前被调用。我想在代码中添加一个检查以避免线程未准备好时的互斥锁,并在线程初始化后使用锁定。
我使用 IBM XL C/C++ v.8.0 在 AIX 5.3 上工作
我正在开发一个类,可以在调用 main() 之前对其进行实例化。我有一个受互斥锁保护的关键部分是代码。不幸的是,应用程序在 AIX 上失败,因为代码在线程初始化之前被调用。我想在代码中添加一个检查以避免线程未准备好时的互斥锁,并在线程初始化后使用锁定。
我使用 IBM XL C/C++ v.8.0 在 AIX 5.3 上工作
您可以像这样使用全局布尔值:
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();
}