Но почему pthread_mutex_lock не помечен как asyn c -Signal Safe
Потому что это не так.
в то время как следующая программа дает вам иллюзия, что это на самом деле asyn c -сигнал безопасен?
Ваша программа не имеет ничего общего с асинхронной c безопасностью сигнала. Любые выводы об асинхронности c безопасности сигнала, полученные из этой тестовой программы, совершенно неверны.
Asyn c Безопасность сигнала означает возможность вызова функции из asyn c обработчик сигнала.
Чтобы увидеть, что pthread_mutex_lock
не является асинхронным c сигнал безопасен, напишите программу с 3 потоками: один выполняет pthread_mutex_lock
и pthread_mutex_unlock
в жестком l oop, один делает то же самое на том же мьютексе из обработчика сигнала , а третий - отправляет в процесс бесконечный поток SIGHUP
s.
Если pthread_mutex_lock
были асинхронными c Сигнал безопасен, эта программа будет работать вечно.
Но я ожидаю, что вы заметите, что эта программа через некоторое время либо заблокирует sh, либо заблокирует ее.
Даже если она не означает, что все же не будет означать, что pthread_mutex_lock
безопасно, только то, что вы еще не доказали, что оно небезопасно .