Подтвердить что ты не робот

Как реализуется pthread_mutex_lock

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

4b9b3361

Ответ 1

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

В Linux используется, например, система под названием Futex (Short for Fast Userpace Mutex).

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

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

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

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

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

Ответ 2

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

Отметьте эту ссылку.