чений, программирование мутек-

Автор admin Четверг, 25 июня 2009 11:32

чений, программирование мутек-сов резко усложняется. Чтобы мутексы всегда освобождались, необходимо проследить за тем, чтобы каждый возможный путь обработки исключения включал вызов release(). Кроме того, любая функция с несколькими путями возврата также должна позаботиться о вызове release() во всех соответствующих точках. Все эти проблемы легко решаются благодаря наличию у стековых (автоматических) объектов деструктора, который всегда вызывается независимо от того, как именно происходит выход из области видимости функции. В библиотеке ZThread эта возможность реализована в форме шаблона Guard. Шаблон Guard создает объекты, называемые стражами, которые при конструировании захватывают объект Lockable вызовом acquire(), а при уничтожении освобождают его вызовом release(). Объекты Guard, созданные в локальном стеке, уничтожаются автоматически независимо от способа выхода из функции и всегда снимают блокировку с объекта Lockable. Здесь приводится реализация предыдущего примера с применением стражей: //: Cll:GuardedEvenGenerator.cpp // Упрощенное программирование мутексов // с применением шаблона Guard. //{L


Комментарии закрыты.