![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Andrew Selivanov |
![]() ![]()
Сообщение
#1
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
Хотелось бы рассмотреть тему потокобезопасных интерфейсов, подробно описанную в http://www.cs.wustl.edu/~schmidt/PDF/locking-patterns.pdf
Проблема: Допустим мы имеем некоторый класс (интерфейс) и несколько функций внутри. Внутри каждой функции мы захватываем мутекс. Теперь, если мы вызовем одну такую функцию из другой, налицо будет deadlock. Решение: Разделить каждую функцию на две - первая будет открытой, вторая закрытой. Открытая функция будет захватывать мутекс и вызывать закрытую (в которой и будет находится основная логика). |
|
|
![]() |
archimed7592 |
![]()
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 127 Регистрация: 27.12.2007 Из: Moscow Пользователь №: 56 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Решение №2: использовать рекурсивный мьютекс.
|
|
|
Andrew Selivanov |
![]()
Сообщение
#3
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
Решение №2: использовать рекурсивный мьютекс. Действительно, однако (цитата из бумаги первого поста) "...Moreover, even if this File Cache implementation is strategized with a recursive mutex it will incur unnecessary overhead when it reacquires the mutex in bind." Хотя IMHO перерасход будет совсем небольшим... |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 22.7.2025, 21:30 |