Я хотел бы контролировать доступ к геттерам и сеттерам для кучи классов данных, чтобы сделать их безопасными доступными из нескольких потоков одновременно. Я уже делал это на Java с помощью java.util.concurrent.locks.ReentrantReadWriteLock, и это было довольно безболезненно.Есть ли эквивалент C++ для java.util.concurrent.locks.ReentrantReadWriteLock?
Но теперь у меня много проблем в моем текущем проекте на C++, потому что я не могу найти повторную реализацию блокировки чтения/записи. В частности, я хочу, чтобы поток позволял потоку получать блокировку чтения, если он уже имеет блокировку записи, без блокировки и без отказа от блокировки записи.
Причина проста: некоторые из моих методов сеттера называют методы getter, а первые (обычно) получают блокировки записи, а последние считывают блокировки. Я не хочу искажать мою прямолинейную архитектуру getter/setter, чтобы обойти ограничения в классах блокировки.
Я пробовал Qt (4.8) QReadWriteLock и связанные с ним классы, а также уникальные возможности Boost и shared_lock. Ни одна из библиотек не реализует необходимое мне обновление. Означает ли какая-то другая часть Boost это?
Или есть ли другая библиотека, которая имеет это? Я действительно удивлен, что ни Qt, ни Boost не выглядят так, как кажется, такой явно желательной особенностью. (И который был частью стандартной библиотеки Java с 2004 года.)
Разве это не конфигурируемый вариант как опция рекурсивного замка? Похоже, мне может понадобиться освежить себя! – Huy
@ Huytard: Спасибо за быстрый ответ. Это позволяет вам получать один и тот же замок более одного раза в одном потоке. Полезно, но недостаточно для моих нужд. – Chris
heh, много лет назад я попытался убедить сопровождающих библиотеки блокировки ускорения сделать повторных попыток блокировок, но они были в корне противоположны концепции блокировки повторного входа. У меня такое чувство, что мы поддерживали нашу собственную вилку, у которой была поддержка повторного участия, что было довольно тривиально. – jtahlborn