Я написал приложение, которое создает поток и запускает цикл while.В приложении после создания потока я переопределил системный вызов fork()
с помощью pthread_atfork()
.[когда вызывается fork
, вызывается вызов функции prepare
, который отменяет поток, и после того, как дочерний процесс порождается, тот же поток создается снова.]
У меня проблема в приведенной выше логике, когдатот же код скомпилирован для другой цели, есть зависание в pthread_join()
.
- порождает поток, который входит в цикл while (я добавил состояние отмены = включено и тип отмены = асинхронный +также учитываются точки отмены)
- переопределить
fork()
с помощью pthread_atfork()
. - при выполнении системного вызова
fork()
функция prepare отменяет запущенный поток с помощью pthread_cancel
и pthread_join()
применяется для проверки завершения потока.
Здесь возникает проблема, pthread_join()
не возвращается.вышеуказанное поведение наблюдается в одной конкретной целевой среде.
У меня есть некоторые сомнения
pthread_cancel()
безопасно ли звонить? - с состоянием отмены = включенои введите asynchronous,
pthread_cancel()
немедленно отменяет поток? - Или есть какой-либо альтернативный способ отменить поток?