"Когда происходят такие таймауты, pthread_cond_timedwait () тем не менее освобождает и повторно захватывает мьютекс, на который ссылается мьютекс, и может потреблять сигнал условия, направленный одновременно на переменную условия."
Мьютекс принадлежит потоку, который будет сигнализировать условие, как заблокированный поток «освобождает» этот мьютекс? Заблокированный поток заблокирован мьютексом и состоянием.
"https://bytefreaks.net/programming-2/c-full-example-of-pthread_cond_timedwait",
Код состоит из двух потоков: основного и рабочего.
основная тема:
заблокировать мьютекс, создать рабочий поток, pthread_cond_timedwait, освободить мьютекс.
рабочий поток:
блокировка мьютекса, действие, состояние сигнала, освобождение мьютекса.
Я попробовал код в этой ссылке и обнаружил, что мьютекс должен быть освобожден до его действия рабочим потоком, в противном случае, если его действие вызывает тайм-аут, у мьютекса нет шансов на освобождение.
Мое изменение в рабочем потоке:
блокировка мьютекса, освобождение мьютекса, действие, состояние сигнала.