07 December 2012

Ответ на C++ задачку

Собственно решение для этой задачи.

Смысл в том, чтобы поручить управление мьютексом временному (безымянному) объекту, время жизни которого ограничено временем жизни полного выражения, в котором он используется. Маленький нюанс -- если мы хотим, чтобы этот временный объект был копируемым, то надо сделать подсчет ссылок, типа как в shared_ptr, и при смерти последней ссылки освобождать мьютекс. Дабы не велосипедить, для этих целей отлично подходит сам shared_ptr (см. приведенный код).

Ну а вопрос с ограничением доступа к защищаемому объекту решается тривиально -- создаете объект, в котором прячете защищаемые данные и их мьютекс. Единственный доступным метод у такого объекта -- получить temporary lock для хранимого внутри объекта.

Как-то так.

No comments:

Post a Comment