Как проверить, завершена ли инициализация управления потоками? - PullRequest
0 голосов
/ 25 октября 2009

Я занимаюсь разработкой класса, который может быть создан до вызова main (). У меня есть критические разделы, защищенные мьютексом, это код. К сожалению, в AIX происходит сбой приложения, поскольку код вызывается до инициализации потоков. Я хочу добавить проверку в код, чтобы избежать блокировки мьютекса, если потоки не готовы, и использовать блокировку после инициализации потоков.

Я работаю в AIX 5.3 с IBM XL C / C ++ v.8.0

1 Ответ

0 голосов
/ 25 октября 2009

Вы можете использовать глобальный bool как это:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...