pthreads join - Как отменить объединение для другого потока - PullRequest
2 голосов
/ 22 марта 2011

Я хочу иметь возможность переключаться на целевой шаг, чтобы присоединиться к.Скажем, t1 ждет t2.t2 еще не вышел, но теперь я хочу, чтобы t1 вместо этого ожидал t3.Есть способ сделать это?Спасибо.

Ответы [ 5 ]

3 голосов
/ 22 марта 2011

Звучит так, как будто вы хотите не переносить pthread_timedjoin_np.

0 голосов
/ 24 марта 2011

Простой способ эмулировать pthread_timedjoin_np переносимо:

  1. Создайте новый поток для выполнения pthread_join и передайте ему условную переменную или семафор.
  2. Выполните по временидождитесь условной переменной или семафора.
  3. Вызов pthread_cancel в новом потоке.
  4. Вызов pthread_join в новом потоке.

Конечно, яоставил некоторые детали, но их легко заполнить.

0 голосов
/ 23 марта 2011

Я думаю, что вы должны использовать условную переменную между t1 и t2.после того, как вы можете соединить t3 с t1.

0 голосов
/ 22 марта 2011

Я считаю, что это невозможно. Но вы можете последовать совету в pthread_join() описании.

Функция pthread_join () является удобство, которое оказалось полезным в многопоточные приложения. это правда, что программист мог симулировать эта функция, если она не была предоставлена передавая дополнительное состояние как часть аргумент для start_routine (). завершающий поток установит флаг указать прекращение и транслировать состояние, которое является частью этого состояния; присоединяющаяся нить будет ждать этого условная переменная.

0 голосов
/ 22 марта 2011

Вы не можете заставить t1 ждать t3, так как нет способа прервать pthread_join, продолжая его работу, однако вы можете отменить t1 с помощью pthread_cancel, который прервет его, и, таким образом, вы больше не будете ждать окончания t2 и получите другой поток, чтобы ждать t3.

...