Пример / руководство по мьютексу?

Я новичок в многопоточности и пытался понять, как работают мьютексы. Много гуглил, и я нашел достойное руководство , но оно оставило некоторые сомнения в том, как оно работает, потому что я создал свою собственную программу, в которой блокировка не работала.

Один из абсолютно неинтуитивных синтаксисов мьютекса - pthread_mutex_lock (& ​​mutex1); , где похоже, что мьютекс заблокирован, когда я действительно хочу заблокировать какую-то другую переменную. Означает ли этот синтаксис, что блокировка мьютекса блокирует область кода до тех пор, пока мьютекс не будет разблокирован? Тогда как потоки узнают, что регион заблокирован? [ ОБНОВЛЕНИЕ: потоки знают, что регион заблокирован ограничением памяти ]. И разве такое явление нельзя назвать критическим сечением? [ ОБНОВЛЕНИЕ: объекты критических разделов доступны только в Windows, где они работают быстрее, чем мьютексы, и видны только потоку, который их реализует. В противном случае критическая секция просто относится к области кода, защищенной мьютексом ]

Короче говоря, Не могли бы вы помочь с простейшим возможным примером программы мьютекса и простейшим возможным объяснением логики того, как это работает? Я уверен, что это поможет множеству других новичков.

164
задан Veedrac 26 June 2014 в 09:37
поделиться