2010-06-23 6 views
0

, когда thread1 уже приобрел блокировку объекта mutex, если thread2 пытается получить блокировку на одном и том же объекте mutex, thread2 будет заблокирован. вот мои вопросы: 1. Как будет thread2 узнать, что объект mutex разблокирован? 2. будет ли thread2 пытаться приобрести блокировку с заранее заданными интервалами времени?некоторые вопросы относительно pthread_mutex_lock

ответ

0

Это действительно зависит от ОС, но обычно случается, что thread2 приостанавливается и помещается в список ожиданий, поддерживаемый мьютексом. Когда мьютекс становится доступным, поток в списке ожидания mutex удаляется из списка и помещается обратно в список активных потоков. ОС может запланировать его, как обычно. thread2 полностью успокаивается, пока не сможет получить мьютекс.

+0

@all thank u guys – lakshman

1

Я чувствую непонимание того, как работает мьютекс. Когда поток 2 пытается получить мьютекс, который уже принадлежит потоку 1, вызов, который пытается принять мьютекс, не вернется до, мьютекс станет доступным (если у вас нет тайм-аута с вариантом trylock()).

Так что нить 2 не должна зацикливаться на ней и продолжать пытаться использовать мьютексы (если вы не используете тайм-аут, чтобы вы могли прервать попытку принять мьютекс на основе какого-то другого условия, такого как условие отмены).

+0

Моя интерпретация заключается в том, что OP спрашивал о реализации самого мьютекса. – mschaef

+1

@mschaef: Возможно, вы правы. Трудно сказать уровень понимания ОП на основе формулировки вопроса. –

Смежные вопросы