![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Andrew Selivanov |
![]() ![]()
Сообщение
#1
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
Хотелось бы рассмотреть тему потокобезопасных интерфейсов, подробно описанную в Link
Проблема: Допустим мы имеем некоторый класс (интерфейс) и несколько функций внутри. Внутри каждой функции мы захватываем мутекс. Теперь, если мы вызовем одну такую функцию из другой, налицо будет deadlock. Решение: Разделить каждую функцию на две - первая будет открытой, вторая закрытой. Открытая функция будет захватывать мутекс и вызывать закрытую (в которой и будет находится основная логика). |
|
|
![]() |
archimed7592 |
![]()
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 127 Регистрация: 27.12.2007 Из: Moscow Пользователь №: 56 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(ViGOur @ 9.1.2008, 13:55) Link Это что за зверек? При повторной попытке блокирования тем же потоком он не блокируется, а просто увеличивается счётчик. При разблокировании уменьшается. Если счётчик равен нулю мьютекс свободен для блокировки любым потоком. Цитата(Andrew Selivanov @ 9.1.2008, 13:59) Link однако (цитата из бумаги первого поста) Каюсь, бумагу не читал, но, IIRC, стандартный виндовый мьютекс изначально рекурсивный. В бусте есть рекурсивный мьютекс. Вообще говоря, не вижу, в чём будет заключатся оверхэд(увеличивание счётчика?).
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 14.8.2025, 6:49 |