Как реализован pthread_mutex_lock - PullRequest
       17

Как реализован pthread_mutex_lock

40 голосов
/ 23 февраля 2011

Мне просто любопытно узнать, как функции, связанные с синхронизацией между потоками, реализованы в Unix.Например, что происходит, когда я звоню pthread_mutex_lock?Есть ли какие-либо указатели в использовании?Ссылка на исходный код действительно поможет.

Ответы [ 2 ]

56 голосов
/ 23 февраля 2011

Он сложен и отличается от варианта Unix к Unix.

Например, в Linux используется система под названием Futex (сокращение от Fast Userspace Mutex).

В этой системе атомная инкрементная и тестовая операция выполняется над переменной mutex в пространстве пользователя.

Если результат операции показывает, что в блокировке не было конфликта, вызов pthread_mutex_lock возвращается без переключения контекста в ядро, поэтому операция захвата мьютекса может быть очень быстрой.

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

Существует много других подробностей, особенно для надежных и / или приоритетных мьютексов наследования, но в этом суть.

Подробнее см .: http://linux.die.net/man/2/futex и http://en.wikipedia.org/wiki/Futex

6 голосов
/ 23 февраля 2011

В Linux pthreads доступна через libc.Обычно это glibc, а источник доступен здесь !

Проверьте это ссылка .

...