после pthread_cancel (), зависание вызова функции pthread_join () - PullRequest
0 голосов
/ 29 ноября 2018

Я написал приложение, которое создает поток и запускает цикл while.В приложении после создания потока я переопределил системный вызов fork() с помощью pthread_atfork().[когда вызывается fork, вызывается вызов функции prepare, который отменяет поток, и после того, как дочерний процесс порождается, тот же поток создается снова.]

У меня проблема в приведенной выше логике, когдатот же код скомпилирован для другой цели, есть зависание в pthread_join().

  1. порождает поток, который входит в цикл while (я добавил состояние отмены = включено и тип отмены = асинхронный +также учитываются точки отмены)
  2. переопределить fork() с помощью pthread_atfork().
  3. при выполнении системного вызова fork() функция prepare отменяет запущенный поток с помощью pthread_cancel и pthread_join() применяется для проверки завершения потока.

Здесь возникает проблема, pthread_join() не возвращается.вышеуказанное поведение наблюдается в одной конкретной целевой среде.

У меня есть некоторые сомнения

  1. pthread_cancel() безопасно ли звонить?
  2. с состоянием отмены = включенои введите asynchronous, pthread_cancel() немедленно отменяет поток?
  3. Или есть какой-либо альтернативный способ отменить поток?
...