Я новичок в многопоточности и пытаюсь понять, как работают мьютексы. Было много Googling и Я нашел достойный учебник, но он все же оставил некоторые сомнения в том, как он работает, потому что я создал свою собственную программу, в которой блокировка не работает.
Один абсолютно неинтуитивный синтаксис мьютекса - это pthread_mutex_lock( &mutex1 );
, где похоже, что мьютекс блокируется, когда то, что я действительно хочу заблокировать, - это другая переменная. Этот синтаксис означает, что блокировка мьютекса блокирует область кода до тех пор, пока мьютекс не будет разблокирован? Тогда как потоки знают, что регион заблокирован? [UPDATE: потоки знают, что область заблокирована, Memory Fencing]. И разве такое явление нельзя назвать критическим? [UPDATE: объекты критического сечения доступны только в Windows, где объекты быстрее, чем мьютексы, и видны только для потока, который его реализует. В противном случае критический раздел просто относится к области кода, защищенной мьютексом]
Короче говоря, не могли бы вы помочь с помощью простейшей возможной программы примера и простейшего возможного объяснения по логике того, как это работает? Я уверен, что это поможет много других новичков.