![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
alexy |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 44 Регистрация: 4.8.2010 Пользователь №: 1931 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
У меня экземпляры одного класса относяться к разным потокам и синхронизируются с помощью сигналов. для доступа к общим данным использую boost::interprocess::upgradeable_mutex. сделал такие объявления
когда метод только пишет или читает, то понятно. некоторым методам надо сначала найти инфу, потом записать, а потом просигналить что они изменили её. сейчас я как бы терю блокировку - то есть снчала прочитал данные, потом записал, потом опять прочитал. а нужно чтобы в это время блокировка не терялась, т.к. данные могут уже измениться, после того как я их прочитал.. где-то нашел это в интернете boost::upgrade_to_unique_lock но в бусте его не нашел ![]() что можно использовать для такой задачи? Сообщение отредактировал alexy - 14.10.2013, 22:30 |
|
|
![]() |
Iron Bug |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
заметь, что interprocess - это не работа между потоками, это работа между процессами. это общая память между приложениями, в которой создаются мьютексы, буферы памяти для обмена и прочие общие объекты. а для синхронизации потоков внутри процесса используются обычные мьютексы boost::thread::mutex.
с областями видимости ("создали переменную - заблокировано") работают scoped мьютексы. на практике это выглядит так:
это общий принцип работы с бустовскими мьютексами. вообще, про мьютексы и синхронизацию читать тут. общее описание различных видов lock'ов детально объяснено в Lock concepts Сообщение отредактировал Iron Bug - 15.10.2013, 7:48 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 14.4.2025, 4:12 |