| Home | Libraries | People | FAQ | More

## Class interprocess_condition_any

boost::interprocess::interprocess_condition_any

## Synopsis

    // In header: <boost/interprocess/sync/interprocess_condition_any.hpp>

    class interprocess_condition_any {
    public:
      // construct/copy/destruct
      interprocess_condition_any();
      ~interprocess_condition_any();

      // public member functions
      void notify_one();
      void notify_all();
      template<typename L> void wait(L &);
      template<typename L, typename Pr> void wait(L &, Pr);
      template<typename L> bool timed_wait(L &, const boost::posix_time::ptime &);
      template<typename L, typename Pr>
        bool timed_wait(L &, const boost::posix_time::ptime &, Pr);
    };

## Description

This class is a condition variable that can be placed in shared memory or memory mapped files.

The interprocess_condition_any class is a generalization of interprocess_condition. Whereas interprocess_condition works only on Locks with mutex_type == interprocess_mutex interprocess_condition_any can operate on any user-defined lock that meets the BasicLockable requirements (lock()/unlock() member functions).

Unlike std::condition_variable_any in C++11, it is NOT safe to invoke the destructor if all threads have been only notified. It is required that they have exited their respective wait functions.

### `interprocess_condition_any` public construct/copy/destruct

1.     interprocess_condition_any();

   Constructs a `interprocess_condition_any`. On error throws `interprocess_exception`.

2.     ~interprocess_condition_any();

   Destroys *this liberating system resources.

### `interprocess_condition_any` public member functions

1.     void notify_one();

   If there is a thread waiting on *this, change that thread's state to ready. Otherwise there is no effect.

2.     void notify_all();

   Change the state of all threads waiting on *this to ready. If there are no waiting threads, notify_all() has no effect.

3.     template<typename L> void wait(L & lock);

   Releases the lock on the `interprocess_mutex` object associated with lock, blocks the current thread of execution until readied by a call to this->notify_one() or this->notify_all(), and then reacquires the lock.

4.     template<typename L, typename Pr> void wait(L & lock, Pr pred);

   The same as: while (!pred()) wait(lock)

5.     template<typename L>
         bool timed_wait(L & lock, const boost::posix_time::ptime & abs_time);

   Releases the lock on the `interprocess_mutex` object associated with lock, blocks the current thread of execution until readied by a call to this->notify_one() or this->notify_all(), or until time abs_time is reached, and then reacquires the lock. Returns: false if time abs_time is reached, otherwise true.

6.     template<typename L, typename Pr>
         bool timed_wait(L & lock, const boost::posix_time::ptime & abs_time,
                         Pr pred);

   The same as: while (!pred()) { if (!timed_wait(lock, abs_time)) return pred(); } return true;