выход из программы в многопоточной программе - PullRequest
3 голосов
/ 07 апреля 2011

Я пишу программу, которая использует библиотеку потоков POSIX.Я выполняю некоторое возвращаемое значение системных вызовов, например:

if (pthread_join(temp, NULL) != 0) {  
    cerr << "system error\n" << endl;  
    exit(1);  
}  

Я хочу, чтобы программа немедленно завершала работу, когда она проходит это условие условия, но может возникнуть проблема, когда процессор решит переключиться надругой поток прямо перед командой 'exit (1)'.
Есть ли способ защитить такие случаи?

использование специального мьютекса для этого не поможет, потому что: 1. У меня много таких вызовов, и блокировка каждого из них сделает код очень медленным, неэффективным и, в основном, очень уродливым!2. Каждый мьютекс требует своей собственной проверки возвращаемого значения!Так что это, очевидно, не решает исходную проблему ..
Есть какие-нибудь идеи помощи?

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Используйте GCC atomic для записи в часто используемую переменную. Каждый поток должен периодически проверять эту переменную. Если эта переменная изменена, выйдите из потока. Основной поток завершает работу, когда все остальные потоки были завершены.

Еще одна ссылка.

0 голосов
/ 07 апреля 2011

Похоже, что для этого есть ответ, но я не знаю, насколько он эффективен (то есть, если у программы уже есть проблемы, это может или не может работать).

Могу ли я предотвратить, чтобы пространство пользовательского пространства Linux сдалось в критический код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...