Собственно решение для этой задачи.
Смысл в том, чтобы поручить управление мьютексом временному (безымянному) объекту, время жизни которого ограничено временем жизни полного выражения, в котором он используется. Маленький нюанс -- если мы хотим, чтобы этот временный объект был копируемым, то надо сделать подсчет ссылок, типа как в shared_ptr, и при смерти последней ссылки освобождать мьютекс. Дабы не велосипедить, для этих целей отлично подходит сам shared_ptr (см. приведенный код).
Ну а вопрос с ограничением доступа к защищаемому объекту решается тривиально -- создаете объект, в котором прячете защищаемые данные и их мьютекс. Единственный доступным метод у такого объекта -- получить temporary lock для хранимого внутри объекта.
Как-то так.
No comments:
Post a Comment