mutex.lock () должен работать следующим образом:
1) проверять владельца блокировки 2) если блокировка принадлежит, поместить поток в очередь ожидания 3) приостановить этот поток до тех пор, пока THREAD, который владеет блокировкой, не отправит пробуждениесигнал вверх.Никакой другой поток не может снять блокировку.
Эти шаги должны быть выполнены как атомарная операция, чтобы все потоки, получающие / освобождающие мьютекс, придерживались правильного поведения, независимо от того, как такие вызовы могут прерываться и повторно входить издругие темы.
'Однако нет ничего похожего на pthread_suspend (), тогда как мне приостановить работу?'- обычно нет.Ядро ОС предоставляет примитивы синхронизации, которые могут блокировать потоки, которые не должны запускаться.Чтобы реализовать «приостановку» в пользовательском пространстве, вы можете только вращаться с ожиданием - что является хорошей стратегией в некоторых случаях (недогруженная многоядерная коробка, где блокировка удерживается только в течение очень короткого времени), но, безусловно,не все (и может привести к невероятно катастрофическим блокировкам на целых кластерах машин).
Если вам нужен мьютекс, используйте мьютекс ОС - это то, что любая кросс-платформенная библиотека.будет делать.