2014-01-11 4 views
0

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

Мой вопрос: могу ли я объявить только один замок и использовать его во всей программе?

Я имею в виду ... когда я блокирую блок кода, я только предотвращаю выполнение другими потоками этого конкретного блока кода ... или я предотвращаю выполнение всех других блоков кода, которые требуют приобретения замок?

Резюме: Должен ли я объявлять замок для каждого другого критического региона?

Я надеюсь, что смысл ... Im еще новым для этих понятий

+0

«... я предотвращаю выполнение всех других блоков кода, которые требуют приобретения замка?» -> да. когда вы вызываете 'pthread_mutex_lock', если используется мьютекс, он блокирует поток, в котором вызывается' pthread_mutex_lock', и поток перезапускает его выполнение, когда 'pthread_mutex_unlock' вызывается потоком, который имеет мьютекс. –

ответ

0

или я предотвратить выполнение всех других блоков коды, которые требуют Приобретения замка?

Да, это все. Независимо от того, какой код выполняет какой-либо поток, он будет блокироваться на мьютексе, пока он не будет получен.

0

Общие ресурсы должны быть защищены от одновременного доступа. Таким образом, вы можете использовать один мьютекс на ресурс.

В вашем случае ресурс представляет собой одну глобальную переменную.

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

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