0
我正在开发一个类,它可以在main()被调用之前实例化。我有一个由互斥体保护的关键部分就是代码。不幸的是,应用程序在AIX上失败,因为代码在线程初始化之前被调用。我想在代码中添加一个检查以避免线程未准备好时的互斥锁定,并在线程初始化后使用锁定。如何检查线程管理初始化是否完成?
我在AIX 5.3工作与IBM XL C/C++ v.8.0
我正在开发一个类,它可以在main()被调用之前实例化。我有一个由互斥体保护的关键部分就是代码。不幸的是,应用程序在AIX上失败,因为代码在线程初始化之前被调用。我想在代码中添加一个检查以避免线程未准备好时的互斥锁定,并在线程初始化后使用锁定。如何检查线程管理初始化是否完成?
我在AIX 5.3工作与IBM XL C/C++ v.8.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();
}
我无法实现您的解决方案,因为我无法访问main()。我需要一个库调用来告诉我线程初始化是否完成。 问题是如何获取该信息,而不是存储在哪里。 – GMichael 2009-10-25 16:03:15