Вы не знакомы с использованием p_thread и семафоров, как бы вы использовали семафор для ожидания завершения дочернего потока? (без присоединения p_thread) - PullRequest
0 голосов
/ 14 октября 2019

Впервые в использовании p_thread и семафоров, как бы вы использовали семафор для ожидания завершения дочернего потока? (без присоединения p_thread)

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Впервые в использовании p_thread и семафоров, как бы вы использовали семафор для ожидания завершения дочернего потока? (без соединения p_thread)

Вы не можете, по крайней мере, с реализацией семафора POSIX. Семафоры POSIX не имеют определенного поведения при завершении потока, поэтому они не могут предоставить сигнал завершения потока per se .

Но один поток может ожидать семафора, который изначально имеет значение ноль и имеет значение 0увеличивается только другим потоком, явно за до , который завершает другой поток. Это не то же самое, что ожидание завершения потока, но оно может быть достаточно близко для ваших целей.

0 голосов
/ 14 октября 2019

Нельзя заставить работать только с одним семафором, как прокомментировал @MarioTheSpoon. Для блокировки вам понадобится еще один семафор:

Main:

  • sem_init(1)
  • sem_init(2)
  • sem_trywait(1)
  • sem_trywait(2)
  • Икра ребенка
  • sem_post(2)
  • sem_wait(1)

Ребенок:

  • sem_wait(2)
  • sem_post(1)
...