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

Class template sharable_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 sharable_lock

boost::interprocess::sharable_lock

Synopsis

// In header: <boost/interprocess/sync/sharable_lock.hpp>
template<typename SharableMutex> 
class sharable_lock {
public:
  // types
  typedef SharableMutex mutex_type;
  // construct/copy/destruct
  sharable_lock();
  explicit sharable_lock(mutex_type &);
  sharable_lock(mutex_type &, defer_lock_type);
  sharable_lock(mutex_type &, accept_ownership_type);
  sharable_lock(mutex_type &, try_to_lock_type);
  sharable_lock(mutex_type &, const boost::posix_time::ptime &);
  sharable_lock(sharable_lock< mutex_type > &&);
  template<typename T> sharable_lock(upgradable_lock< T > &&, unspecified = 0);
  template<typename T> sharable_lock(scoped_lock< T > &&, unspecified = 0);
  sharable_lock & operator=(sharable_lock< mutex_type > &&);
  ~sharable_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(sharable_lock< mutex_type > &);
};

Description

sharable_lock предназначен для выполнения задач по блокировке слайдеров (таких как блокировка чтения), разблокировке, блокировке с возможностью разделения и блокировке с временным разделением (рекурсивной или нет) для Mutex. Mutex не должен предоставлять все эти функции. Если клиент sharable_lock не использует функциональность, которую не предоставляет Mutex, никакого вреда не наносится. Владение Mutex может быть разделено между sharable_locks и одним upgradable_lock. sharable_lock не поддерживает семантику копирования. Но sharable_lock поддерживает передачу прав собственности от sharable_lock, upgradable_lock и scoped_lock через синтаксис transfer_lock.

sharable_lock public construct/copy/destruct

  1. sharable_lock();

    Последствия: По умолчанию строится sharable_lock. Postconditions: owns() == ложный и мутекс() == 0.

  2. explicit sharable_lock(mutex_type & m);

    Последствия: m.lock_sharable(). Постусловия: owns() == true и mutex() == &m. Примечания: Конструктор возьмет в собственность мутекс. Если другой поток уже владеет mutex с эксклюзивным владением (scoped_lock), этот поток будет блокироваться до тех пор, пока mutex не будет выпущен. Если другой поток владеет мутексом с возможностью обмена или обновления, то блокировки не произойдет. Независимо от того, обрабатывает ли этот конструктор рекурсивную блокировку, зависит от мутекса.

  3. sharable_lock(mutex_type & m, defer_lock_type);

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

  4. sharable_lock(mutex_type & m, accept_ownership_type);

    Постусловия: owns() == true, и mutex() == &m. Примечания: Конструктор предположит, что мутекс уже заперт. Не требуется никакого влияния на упомянутый мутекс.

  5. sharable_lock(mutex_type & m, try_to_lock_type);

    Последствия: m.try_lock_sharable() Пост-условия: mutex() == &m. owns() == возвращаемое значение m.try_lock_sharable(), выполненного внутри конструктора. Примечания: Конструктор будет владеть мутексом, если он сможет сделать это, не дожидаясь. Независимо от того, обрабатывает ли этот конструктор рекурсивную блокировку, зависит от мутекса. Если mutex_type не поддерживает try_lock_sharable, этот конструктор потерпит неудачу во время компиляции, если будет реализован, но в противном случае не будет иметь эффекта.

  6. sharable_lock(mutex_type& m, const boost::posix_time::ptime; abs_time;

    Последствия: m.timed_lock_sharable(abs_time) Пост-условия: mutex() == &m. owns() == возвратное значение m.timed_lock_sharable(), выполненного внутри конструктора. Примечания: Конструктор будет владеть mutex, если он сможет сделать это в течение указанного времени. Независимо от того, обрабатывает ли этот конструктор рекурсивную блокировку, зависит от мутекса. Если mutex_type не поддерживает timed_lock_sharable, этот конструктор потерпит неудачу во время компиляции, если будет реализован, но в противном случае не будет иметь эффекта.

  7. sharable_locksharable_lock< mutex_type > && upgr;

    Постусловия: mutex() == значение upgr.mutex() до постройки. upgr.owns() == ложное после постройки. Примечание: Если upgr sharable_lock владеет mutex, право собственности перемещается на этот sharable_lock без блокировки. Если upgr sharable_lock не владеет мутексом, то и этот sharable_lock не будет. Только перемещенное sharable_lock будет соответствовать этой подписи. Неподвижный sharable_lock можно перемещать с выражением: «boost::move(lock);». Этот конструктор не изменяет состояние мутекса, только потенциально владеющий им.

  8. templatetypename T>(upgradable_lock<  >  upgr, ;

    Последствия: Если upgr.owns() вызывает разблокировку_upgradable_and_lock_sharable() по адресу mutex. Постусловия: mutex() == значение upgr.mutex() было до строительства. upgr.mutex() == 0 owns() == значение upgr.owns() до строительства. upgr.owns() == ложное после строительства. Примечания: Если upgr заблокирован, этот конструктор заблокирует этот sharable_lock при разблокировке upgr. Только перемещенное sharable_lock будет соответствовать этой подписи. Неподвижный обновляемый_lock можно перемещать с выражением: "boost::move(lock);".

  9. templatetypename T>(scoped_lock< > && scop, ;

    Последствия: Если scop.owns() вызывает разблокировку_and_lock_sharable() по адресу mutex. mutex() == значение scop.mutex() до начала строительства. scop.mutex() == 0 owns() == scop.owns() перед конструктором. После строительства scop.owns() == ложный. Примечания: Если скоп заблокирован, этот конструктор передаст исключительную собственность в сельскохозяйственную собственность этого sharable_lock. Только перемещенное scoped_lock соответствует этой подписи. Неподвижный scoped_lock можно перемещать с выражением: "boost::move(lock);".

  10. sharable_lock &оператор(sharable_lock< mutex_type > && upgr;

    Эффекты: Если владеет() перед вызовом, то разблокировка_sharable() вызывается на mutex(). * это приводит к состоянию upgr, а upgr устанавливается в состояние, построенное по умолчанию. Примечания: С рекурсивным мутексом возможно, что и этот, и восходящий владеют мутексом до назначения. В этом случае это будет владеть mutex после назначения (и upgr не будет), но количество блокировки mutex будет уменьшено одним.

  11. ~sharable_lock();

    Влияние: если (владеет()) mp_mutex->unlock_sharable(). Примечания: Поведение деструктора гарантирует, что замок mutex не просочился.

sharable_lock public member functions

  1. void lock();

    Последствия: Если mutex() == 0 или уже заблокирован, бросается блокировка_исключение() исключение. Вызовы lock_sharable() по адресу mutex. Пост-условия: Собственность () == истинно. Примечание: sharable_lock изменяется от состояния невладения mutex к владению mutex, блокируя при необходимости.

  2. bool try_lock();

    Последствия: Если mutex() == 0 или уже заблокирован, бросается блокировка_исключение() исключение. Вызовы try_lock_sharable() по адресу mutex. Постусловия: владеет() == значение, возвращаемое от mutex()->try_lock_sharable(). Примечание: sharable_lock изменяется от состояния невладения mutex к владению mutex, но только если блокировка не требуется. Если mutex_type не поддерживает try_lock_sharable(), эта функция не сработает во время компиляции, если она будет реализована.

  3. booltimed_lock(constboost::posix_time::ptime& abs_time;

    Последствия: Если mutex() == 0 или уже заблокирован, бросается блокировка_исключение() исключение. Вызовы timed_lock_sharable(abs_time) по адресу mutex. Постусловия: владеет() == значение, возвращаемое от mutex()->timed_lock_sharable(elps_time). Примечание: sharable_lock изменяется от состояния невладения мутексом к владению мутексом, но только в том случае, если он может получить право собственности в течение указанного временного интервала. Если mutex_type не поддерживает timed_lock_sharable(), эта функция не сработает во время компиляции, если она будет реализована, но в противном случае не будет иметь эффекта.

  4. void unlock();

    Последствия: Если mutex() == 0 или не заблокирован, бросается блокировка_исключение() исключение. Вызовы unlock_sharable() по адресу mutex. Собственные () == ложные. Примечание: sharable_lock изменяется от состояния владения mutex к невладению mutex.

  5. bool owns() const;

    Возвращает истинный результат, если этот scoped_lock приобрел указанный mutex.

  6. оператор unspecified_bool_type() const;

    Конверсия в bool. Возврат собственных ().

  7. mutex_type mutex() const;

    Возвращает указатель на упомянутый mutex, или 0, если нет mutex для ссылки.

  8. mutex_type release();

    Возвращает указатель на упомянутый mutex, или 0, если нет mutex для ссылки. Постусловия: mutex() == 0 и owns() == false.

  9. voidswap(sharable_lock< mutex_type > & other);

    Последствия: состояние своп-состояния с перемещаемым замком. Броски: Ничего.


PrevUpHomeNext

Статья Class template sharable_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-05-19 20:23:18/0.010141849517822/1