Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - [200]
Класс >std::mutex предоставляет базовые средства взаимного исключения и синхронизации потоков, применяемые для защиты разделяемых данных. Перед тем как обращаться к данным, защищаемым мьютексом, этот мьютекс необходимо захватить (или заблокировать), вызвав функцию >lock() или >try_lock(). В любой момент времени удерживать мьютекс может только один поток; если другой поток попытается захватить тот же мьютекс, то функция >try_lock() вернет ошибку, а функция >lock() приостановит выполнение потока. Закончив операции над разделяемыми данными, поток должен вызвать функцию >unlock(), чтобы освободить мьютекс и дать другим потокам возможность захватить его.
Экземпляр >std::mutex удовлетворяет требованиям концепции >Lockable.
Определение класса
>class mutex {
>public:
> mutex(mutex const&)=delete;
> mutex& operator=(mutex const&)=delete;
> constexpr mutex() noexcept;
> ~mutex();
> void lock();
> void unlock();
> bool try_lock();
>};
>STD::MUTEX, КОНСТРУКТОР ПО УМОЛЧАНИЮ
Конструирует объект >std::mutex.
Объявление
>constexpr mutex() noexcept;
Результат
Конструирует экземпляр >std::mutex.
Постусловия
Вновь сконструированный объект >std::mutex первоначально не захвачен.
Исключения
Нет.
>STD::MUTEX, ДЕСТРУКТОР
Уничтожает объект >std::mutex.
Объявление
>~mutex();
Предусловия
Объект >*this не должен быть захвачен.
Результат
Уничтожает >*this.
Исключения
Нет.
>STD::MUTEX::LOCK, ФУНКЦИЯ-ЧЛЕН
Захватывает объект >std::mutex для текущего потока.
Объявление
>void lock();
Предусловия
Вызывающий поток не должен удерживать мьютекс >*this.
Результат
Блокирует текущий поток, пока мьютекс >*this не будет захвачен.
Постусловия
>*this захвачен текущим потоком.
Исключения
Исключение типа >std::system_error в случае ошибки.
>STD::MUTEX::TRY_LOCK, ФУНКЦИЯ-ЧЛЕН
Пытается захватить объект >std::mutex для текущего потока.
Объявление
>bool try_lock();
Предусловия
Вызывающий поток не должен удерживать мьютекс >*this.
Результат
Пытается захватить объект >std::mutex для текущего потока без блокирования.
Возвращаемое значение
>true, если вызывающий поток захватил мьютекс, иначе >false.
Постусловия
>*this захвачен вызывающим потоком, если функция вернула >true.
Исключения
Нет.
Примечание. Функция может не захватить мьютекс (и вернуть >false), даже если никакой другой поток не удерживает >*this.
>STD::MUTEX::UNLOCK, ФУНКЦИЯ-ЧЛЕН
Освобождает объект >std::mutex, удерживаемый текущим потоком.
Объявление
>void unlock();
Предусловия
Вызывающий поток должен удерживать мьютекс >*this.
Результат
Освобождает мьютекс >std::mutex, удерживаемый текущим потоком.
Если другие потоки были блокированы в ожидании >*this, то один из них разблокируется.
Постусловия
>*this не захвачен вызывающим потоком.
Исключения
Нет.
D.5.2. Класс >std::recursive_mutex
Класс >std::recursive_mutex предоставляет базовые средства взаимного исключения и синхронизации потоков, применяемые для защиты разделяемых данных. Перед тем как обращаться к данным, защищаемым мьютексом, этот мьютекс необходимо захватить (или заблокировать), вызвав функцию >lock() или >try_lock(). В любой момент времени удерживать мьютекс может только один поток; если другой поток попытается захватить тот же мьютекс, то функция >try_lock() вернет ошибку, а функция >lock() приостановит выполнение потока. Закончив операции над разделяемыми данными, поток должен вызвать функцию >unlock(), чтобы освободить мьютекс и дать другим потокам возможность захватить его.
Этот мьютекс называется рекурсивным, потому что поток, удерживающий мьютекс типа >std::recursive_mutex, может снова обратиться к функции >lock() или >try_lock(), что приведёт к увеличению счетчика захватов. Никакой другой поток не сможет захватить этот мьютекс, пока владеющий им поток не вызовет функцию >unlock столько раз, сколько было успешных вызовов >lock() или >try_lock().
Экземпляр >std::recursive_mutex удовлетворяет требованиям концепции >Lockable.
Определение класса
>class recursive_mutex {
>public:
> recursive_mutex(recursive_mutex const&) = delete;
> recursive_mutex& operator=(recursive_mutex const&) = delete;
> recursive_mutex() noexcept;
> ~recursive_mutex();
> void lock();
> void unlock();
> bool try_lock() noexcept;
>};
>STD::RECURSIVE_MUTEX, КОНСТРУКТОР ПО УМОЛЧАНИЮ
Конструирует объект >std::recursive_mutex.
Объявление
>recursive_mutex() noexcept;
Результат
Конструирует экземпляр >std::recursive_mutex.
Постусловия
Вновь сконструированный объект >std::recursive_mutex первоначально не захвачен.
Исключения
Исключение типа >std::system_error, если не удалось создать экземпляр >std::recursive_mutex.
>STD::RECURSIVE_MUTEX, ДЕСТРУКТОР
Уничтожает объект >std::recursive_mutex.
Объявление
>~recursive_mutex();
Предусловия
Объект >*this не должен быть захвачен.
Результат
Уничтожает >*this.
Исключения
Нет.
>STD::RECURSIVE_MUTEX::LOCK, ФУНКЦИЯ-ЧЛЕН
Захватывает объект >std::recursive_mutex для текущего потока.
Объявление
>void lock();
Результат
Блокирует текущий поток, пока мьютекс >*this не будет захвачен.
Постусловия
>*this захвачен текущим потоком. Если вызывающий поток уже удерживал >*this, то счетчик захватов увеличивается на единицу.
Исключения
Исключение типа >std::system_error в случае ошибки.
>STD::RECURSIVE_MUTEX::TRY_LOCK, ФУНКЦИЯ-ЧЛЕН
Пытается захватить объект >std::recursive_mutex
Это знаменитый бестселлер, который научит вас использовать власть массового сотрудничества и покажет, как применять викиномику в вашем бизнесе. Переведенная более чем на двадцать языков и неоднократно номинированная на звание лучшей бизнес-книги, "Викиномика" стала обязательным чтением для деловых людей во всем мире. Она разъясняет, как массовое сотрудничество происходит не только на сайтах Wikipedia и YouTube, но и в традиционных компаниях, использующих технологии для того, чтобы вдохнуть новую жизнь в свои предприятия.Дон Тапскотт и Энтони Уильямс раскрывают принципы викиномики и рассказывают потрясающие истории о том, как массы людей (как за деньги, так и добровольно) создают новости, изучают геном человека, создают ремиксы любимой музыки, находят лекарства от болезней, редактируют школьные учебники, изобретают новую косметику, пишут программное обеспечение и даже строят мотоциклы.Знания, ресурсы и вычислительные способности миллиардов людей самоорганизуются и превращаются в новую значительную коллективную силу, действующую согласованно и управляемую с помощью блогов, вики, чатов, сетей равноправных партнеров и личные трансляции.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.