13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
1

Когда нужно лочить ( делать lock() ) сразу нескольких мьютексов

05.03.2015, 01:30. Показов 1486. Ответов 9
Метки нет (Все метки)

Здравствуйте товарищи девелоперы!
Прошу прощения за банальный в своем роде вопрос, однако когда мне может понадобиться сделать lock() на нескольких мьютексах одновременно ? Прошу сразу дать код, ибо ответ "когда нужно захватить несколько ресурсов" очевиден, но я не совсем понимаю почему мы не можем обойтись только одним мьютексом. Спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2015, 01:30
Ответы с готовыми решениями:

StreamReader: когда закрывать поток и нужно ли это делать
Нужно ли закрывать постоянно? sr = new StreamReader("123.txt"); string a = sr.ReadToEnd();...

Нужно обрабатывать запросы сразу нескольких пользователей Телеграм
Приветствую всех) Пишу бота для Телеграм для скачивания музыки на python. В ходе небольшого теста...

Прочистка видеокарты, когда это нужно делать, с каким интервалом времени?
Добрый вечер! Видеокарта ASUS GTS 450 во время игры в GTA San Andreas греется до 55 градусов- это...

Нужно ли делать сброс чернил, когда чернилы опускаются ниже отмеченного уровня?
Струный принтер. Или просто долить чернилы нужно?

9
7175 / 6147 / 2805
Регистрация: 14.04.2014
Сообщений: 26,510
05.03.2015, 10:02 2
Ну используй один мьютекс, если тебе хватает.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.03.2015, 12:49 3
Цитата Сообщение от TheChosenOne Посмотреть сообщение
но я не совсем понимаю почему мы не можем обойтись только одним мьютексом.
Представь, что у тебя n объектов и у каждого свой мютекс для монопольного взаимодействия с ним. В какой-то момент 2 объекта решили взаимодействовать друг с другом. Очевидно нужно захватить 2 мютекса.
Чтобы не было дедлоков в такой ситуации используй std::lock (c++11).
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
05.03.2015, 14:37 4
Tulosba, так очевидно же
Прошу сразу дать код, ибо ответ "когда нужно захватить несколько ресурсов" очевиден
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.03.2015, 14:39 5
Croessmah, ну тогда код такой:
C++
1
std::lock( mutex1, mutex2 );
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
05.03.2015, 14:45 6
Tulosba, да это тоже очевидно
Лично я вообще не понял в чем состоит вопрос.
0
710 / 282 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
05.03.2015, 14:58 7
Никогда не надо лочить, да и вообще синхронизация не нужна. Юзай модель акторов
0
13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
06.03.2015, 02:07  [ТС] 8
Tulosba, читал я Страуструпа, собственно поэтому и возник вопрос. Мьютекс всего лишь ммм... как бы сказать... оне не представляет ресурс и не "захватывает" его. Собственно он просто ,когда в потоке выполняется ф-я в которой делается lock() на мьютексе, не позволяет другому потоку выполнить ф-ю дальше, если уже какой-либо другой поток сделал lock() на мьютексе. И пока поток не освободит мьютекс он может сколько угодно изменять любое число ресурсов и доступ другим потокам будет закрыт в это время ( разумеется если доступ к ресурсу осуществляется только из этой ф-и). Поэтому и прошу код, где нужно будет каждый ресурс представлять отдельным мьютексом.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.03.2015, 07:32 9
Лучший ответ Сообщение было отмечено TheChosenOne как решение

Решение

TheChosenOne, ты уже почти сам ответил на свой вопрос. Если доступ ко всем N ресурсам только в одном месте кода, тогда достаточно и одного мютекса. Но что делать, если в другом месте нужно получить доступ ко всего лишь одному из этих N ресурсов? Снова захватывать тот самый единственный мютекс? Это не эффективно. Зачем лочить все объекты, когда работаешь только с одним? Поэтому то кол-во мютексов и будет увеличиваться. В пределе - по одному на ресурс. И вот когда нужно обработать m ресурсов, нужно захватить m мютексов.
1
13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
07.03.2015, 00:05  [ТС] 10
Tulosba,
Все. Подумал, осмыслил, понял.
Благодарю
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2015, 00:05
Помогаю со студенческими работами здесь

Вывести на экран в символическом виде состояние NUM LOCK, CAPS LOCK и SCROLL LOCK
Помогите решить задачку на турбо си Выводить на экран в символическом виде состояние NUM LOCK,...

Acer aspire 5552G-N974G64Mikk Проблема с Caps Lock, Num Lock, Scroll Lock
Вообщем у меня такая же проблемма https://www.cyberforum.ru/notebooks/thread552722.html ...

Клавиатура мигает всеми тремя индикаторами Caps Lock, Scroll Lock и Num Lock и соответственно не работает!
Здравствуйте парни и девушки! Столкнулся с такой проблемой! Имеется клавиатура Genius Ergomedia...

Работа с клавиатурой (клавиши num lock, caps lock, scroll lock)
определить состояние статуса клавиш " num lock, caps lock,scroll lock " с отображением и их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru