Запустить поток, когда другой запущен - PullRequest
0 голосов
/ 23 апреля 2011

Я запускаю 3 pthreads и после запуска своего приложения несколько раз вижу, что нет точного порядка создания потока в соответствии с порядком операторов create.

Как создать один поток один раз заопределенная нить началась?

Я все еще хочу создать поток с того же "уровня", а не создавать необходимый поток внутри потока, который я хочу начать первым.

Ответы [ 4 ]

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

Темы не имеют "уровней" или родительских / дочерних отношений. Все потоки, включая начальные основные потоки, являются равноправными. Любой поток может вызвать pthread_join в любом другом потоке, если дескриптор потока является действительным и поток не отсоединен.

Если вам действительно нужно навести порядок, самый простой инструмент для этого - барьеры (pthread_barrier_wait). С другой стороны, условные переменные более эффективны, но сложнее в использовании и, вероятно, не нужны в этой ситуации.

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

Можете ли вы вызвать вызов pthread_create () из функции потока?

pthread_create создает поток, и, как вы обнаружили, он не вызывает функцию потока. По сути, ваш новый поток находится в списке активных потоков, и планировщик может дать ему временной интервал, когда он выберет. Обычно это пара мс, но может быть и дольше.

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

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

См .: http://support.sas.com/documentation/onlinedoc/sasc/doc700/html/lr2/z2101576.htm

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

возможно, вы можете найти интересные сигналы и дождаться условных переменных. Вот примеры и объяснения. https://computing.llnl.gov/tutorials/pthreads/#ConVarSignal

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