Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Class template upgradable_lock

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Indexes and Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Class template upgradable_lock

boost::interprocess::upgradable_lock

Synopsis

// In header: <boost/interprocess/sync/upgradable_lock.hpp>
template<typename UpgradableMutex> 
class upgradable_lock {
public:
  // types
  typedef UpgradableMutex mutex_type;
  // construct/copy/destruct
  upgradable_lock();
  explicit upgradable_lock(mutex_type &);
  upgradable_lock(mutex_type &, defer_lock_type);
  upgradable_lock(mutex_type &, accept_ownership_type);
  upgradable_lock(mutex_type &, try_to_lock_type);
  upgradable_lock(mutex_type &, const boost::posix_time::ptime &);
  upgradable_lock(upgradable_lock< mutex_type > &&);
  template<typename T> upgradable_lock(scoped_lock< T > &&, unspecified = 0);
  template<typename T> 
    upgradable_lock(sharable_lock< T > &&, try_to_lock_type, unspecified = 0);
  upgradable_lock & operator=(upgradable_lock &&);
  ~upgradable_lock();
  // public member functions
  void lock();
  bool try_lock();
  bool timed_lock(const boost::posix_time::ptime &);
  void unlock();
  bool owns() const;
  operator unspecified_bool_type() const;
  mutex_type * mutex() const;
  mutex_type * release();
  void swap(upgradable_lock< mutex_type > &);
};

Description

upgradable_lock предназначен для выполнения задач для чтения-блокирования, разблокировки, пробного чтения-заблокирования и блокировки времени (рекурсивного или нет) для Mutex. Кроме того, upgradable_lock может передавать право собственности на scoped_lock с использованием синтаксиса Transfer_lock. Mutex не нужен весь функционал. Если клиент upgradable_lock не использует функционал, который Mutex не предоставляет, никакого вреда не делается. Собственность Mutex может быть распределена между read_locks, а один upgradable_lock. upgradable_lock не поддерживает копировальную семантику. Однако upgradable_lock поддерживает передачу прав собственности от upgradable_locks или scoped_locks через transfer_lock syntax.

upgradable_lock public construct/copy/destruct

  1. upgradable_lock();

    Effects: Default builds a upgradable_lock. Post conditions: owns() ==

  2. explicit upgradable_lock(mutex_type & m);
  3. upgradable_lock(mutex_type & m, defer_lock_type);

    Современные условия: owns() == false, and mutex() == &m. Примечания: Конструктор не возьмет на себя ответственность за мутекс. Нет никакого эффекта, необходимого для ссылки mutex.

  4. upgradable_lock(mutex_type & m, accept_ownership_type;

    Современные условия: owns() == True, and mutex() == &m. Примечания: Конструктор предполагает, что мутекс уже переоценен. Нет никакого эффекта, необходимого для ссылки mutex.

  5. upgradable_lock(mutex_type & m, try_to_lock_type;

    Effects: m.try_lock_upgradable(). Post conditions: mutex() == &m. owns() == the return value of the m.try_lock_upgradable() executed within the constructionor. Примечания: Конструктор возьмет поддающееся модернизации владение ом, если он сможет это сделать, не дожидаясь. Является ли этот конструктор рекурсивным замком зависит отmutа. Если mutex_type не поддерживает try_lock_upgradable, этот конструктор потерпит неудачу во время компиляции, если его обобщить, но в противном случае не будет иметь эффекта.

  6. upgradable_lock(mutex_type & m, const boost::_posix_time::ptime& abs_time;

    Effects:mup. Post conditions: mutex() == &m. owns() == the return value of the m.timed_lock_upgradable() executed within the constructionor. Примечания: Конструктор возьмет поддающееся модернизации владение ом, если он может сделать это в течение указанного времени. Является ли этот конструктор рекурсивным замком зависит отmutа. Если mutex_type не поддерживает Timed_lock_upgradable, этот конструктор потерпит неудачу во время компиляции, если его обобщить, но в противном случае не будет иметь эффекта.

  7. upgradable_lock(upgradable_lock< mutex_type > && upgr);

    Effects: не влияет на основной мутекс. Post conditions: mutex() == значение upgr.mutex() было до строительства. upgr.mutex() == 0. owns() == upgr.owns() перед строительством. upgr.owns() == false. Примечания: Если upgr заблокирован, этот конструктор заблокирует это upgradable_lock, открывая вверх. Если upgr разблокирован, то этот upgradable_lock также будет разблокирован. Только перемещенная upgradable_lock будет соответствовать этой подписи. Неповрежденный upgradable_lock может быть перемещен с выражением: "boost::move(lock); Этот конструктор не изменяет состояние мутекса, только потенциально кто его владеет.

  8. template<typename T> upgradable_lock(scoped_lock< T >& scop,> Почтовые условия: mutex() == значение scop.mutex() было до строительства. scop.mutex() == 0. owns() == scop.owns() перед конструктором. После строительства scop.owns() == false. Примечания: Если коп заперт, этот конструктор перенесет эксклюзивное владение на высококлассное владение этим upgradable_lock. Только перемещенная sharable_lock будет соответствовать этой подписи. Неповрежденный sharable_lock может быть перемещен с выражением: "boost::move(lock); 

  9. замкните<имя>>>>>_2>>>>>,>>> b) если try_unlock_sharable_and_lock_upgradable() возвратится фальшивым, то Шар не затронут, и это upgradable_lock конструкция имеет те же последствия, что и конструкция по умолчанию. c) Else shar.owns() является ложным. mutex() получает значение от shar.release() и владеет() настроено на ложное. Примечания: Эта конструкция не будет блокироваться. Он будет пытаться получить право собственности на мутекс от shar немедленно, одновременно меняя тип блокировки от «замка чтения» до «обновленного замка». Если «замок чтения» не удерживается в первую очередь, mutex просто меняет тип на разблокированный «опградируемый замок». Если «замок чтения» удерживается, то передача мутекс происходит только в том случае, если она может сделать это без блокировки. 

  10. upgradable_lock & оператор=(upgradable_lock & upgr;;

    Effects: If owns(), то_upgradable() называется на mutex(). *это получает состояние вверх и вверх устанавливается в по умолчанию построенное состояние. Примечания: С рекурсивной мутекс возможно, что и этот, и вверхгр владеют мутексом до назначения. В этом случае это будет владеть мутексом после назначения (и upgr не будет), но переоцениваемый блокировка мутекса будет разлагаться одним.

  11. ~upgradable_lock();

    Следы: если (owns()) m_->unlock_upgradable(). Примечания: Поведение деструктора гарантирует, что блокировкаmutа не будет просочиться.

upgradable_lock public member functions

  1. void lock();

    Effects: Если mutex() == 0 или если уже заблокирован, бросает исключение Lock_Exion(). Звонок lock_upgradable() on the referenced mutex. Post conditions: owns() == True. Примечания: sharable_lock меняется от состояния не владения mutex, до владения mutex, блокируя при необходимости.

  2. bool try_lock();

    Effects: If mutex() == 0 or if already locked,бросает исключение блокировки_исключения(). calls try_lock_upgradable() on the referenced mutex. Post conditions: owns() == значение возвращается из mutex()->try_lock_upgradable(). Примечания: upgradable_lock меняется от состояния не владения мутексом, до владения мутексом, но только если блокировка не требуется. Если mutex_type не поддерживает try_lock_upgradable(), эта функция потерпит неудачу во время компиляции, если ее обобщить, но в противном случае не будет иметь эффекта.

  3. bool Timed_lock(const boost::posix_time::ptime & abs_time);

    Effects: Если mutex() == 0 или если уже заблокирован, выбрасывает замкза исключением). Звонки timed_lock_upgradable(abs_time) на ссылках mutex. Post conditions: owns() == значение возвращается из mutex()->timed_lock_upgradable(abs_time). Примечания: upgradable_lock меняется от состояния не владения mutex, до владения mutex, но только если он может получить право собственности в течение указанного времени. Если mutex_type не поддерживает Timed_lock_upgradable(abs_time), эта функция потерпит неудачу во время компиляции, если ее обобщить, но в противном случае не будет иметь эффекта.

  4. void unlock();

    Effects: If mutex() == 0 or if not locked,бросает исключение блокировки_исключения(). Звонки разблокировать_выполнить() на ссылках mutex. Post conditions: owns() == false. Заметки: upgradable_lock изменения от состояния владения мутексом, до отказа от владения мутексом.

  5. bool owns() const;

    Effects: Returns true, если этот scoped_lock приобрел эталонный мутекс.

  6. оператор  неуказанный_bool_type() const;

    Конверсия на болель. Returns owns().

  7. mutex_type * mutex() const;

    Effects: Returns a pointer to the referenced mutex, or 0 if there is no mutex to reference.

  8. mutex_type * release();

    Effects: Returns a pointer to the referenced mutex, or 0 if there is no mutex to reference. Post conditions: mutex() == 0 and owns() == false.

  9. void swap(upgradable_lock< mutex_type > & другие;;

    Эффекты: Swaps состояние с перемещенным замком. Выбросы: Ничего.


PrevUpHomeNext

Статья Class template upgradable_lock раздела The Boost C++ Libraries BoostBook Documentation Subset Indexes and Reference может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Indexes and Reference ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 00:30:58/0.0051131248474121/0