Ejemplo n.º 1
0
 void clear(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   (void)lock;
   ::ResetEvent(events_[0]);
   state_ &= ~std::size_t(1);
 }
Ejemplo n.º 2
0
 void signal_and_unlock(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   signalled_ = true;
   lock.unlock();
   cond_.notify_one();
 }
Ejemplo n.º 3
0
 void signal_and_unlock(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   signalled_ = true;
   lock.unlock();
   ::pthread_cond_signal(&cond_); // Ignore EINVAL.
 }
Ejemplo n.º 4
0
 void signal_all(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   (void)lock;
   state_ |= 1;
   cond_.notify_all();
 }
Ejemplo n.º 5
0
 void signal(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   (void)lock;
   signalled_ = true;
   ::pthread_cond_signal(&cond_); // Ignore EINVAL.
 }
Ejemplo n.º 6
0
 void wait(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   unique_lock_adapter u_lock(lock);
   while (!signalled_)
     cond_.wait(u_lock.unique_lock_);
 }
Ejemplo n.º 7
0
 void signal_all(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   (void)lock;
   state_ |= 1;
   ::SetEvent(events_[0]);
 }
Ejemplo n.º 8
0
 void signal(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   (void)lock;
   signalled_ = true;
   cond_.notify_one();
 }
Ejemplo n.º 9
0
 bool wait_for_usec(Lock& lock, long usec)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   unique_lock_adapter u_lock(lock);
   if (!signalled_)
     cond_.wait_for(u_lock.unique_lock_, std::chrono::microseconds(usec));
   return signalled_;
 }
Ejemplo n.º 10
0
 void unlock_and_signal_one(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   state_ |= 1;
   bool have_waiters = (state_ > 1);
   lock.unlock();
   if (have_waiters)
     ::SetEvent(events_[1]);
 }
Ejemplo n.º 11
0
 void unlock_and_signal_one(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   state_ |= 1;
   bool have_waiters = (state_ > 1);
   lock.unlock();
   if (have_waiters)
     cond_.notify_one();
 }
Ejemplo n.º 12
0
 void wait(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   unique_lock_adapter u_lock(lock);
   while ((state_ & 1) == 0)
   {
     waiter w(state_);
     cond_.wait(u_lock.unique_lock_);
   }
 }
Ejemplo n.º 13
0
 bool wait_for_usec(Lock& lock, long usec)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   unique_lock_adapter u_lock(lock);
   if ((state_ & 1) == 0)
   {
     waiter w(state_);
     cond_.wait_for(u_lock.unique_lock_, std::chrono::microseconds(usec));
   }
   return (state_ & 1) != 0;
 }
Ejemplo n.º 14
0
 bool maybe_unlock_and_signal_one(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   state_ |= 1;
   if (state_ > 1)
   {
     lock.unlock();
     cond_.notify_one();
     return true;
   }
   return false;
 }
Ejemplo n.º 15
0
 bool maybe_unlock_and_signal_one(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   state_ |= 1;
   if (state_ > 1)
   {
     lock.unlock();
     ::SetEvent(events_[1]);
     return true;
   }
   return false;
 }
Ejemplo n.º 16
0
  void wait(Lock& lock)
  {
    BOOST_ASIO_ASSERT(lock.locked());
    while ((state_ & 1) == 0)
    {
      state_ += 2;
      lock.unlock();
#if defined(BOOST_ASIO_WINDOWS_APP)
      ::WaitForMultipleObjectsEx(2, events_, false, INFINITE, false);
#else // defined(BOOST_ASIO_WINDOWS_APP)
      ::WaitForMultipleObjects(2, events_, false, INFINITE);
#endif // defined(BOOST_ASIO_WINDOWS_APP)
      lock.lock();
      state_ -= 2;
    }
  }
Ejemplo n.º 17
0
  bool wait_for_usec(Lock& lock, long usec)
  {
    BOOST_ASIO_ASSERT(lock.locked());
    if ((state_ & 1) == 0)
    {
      state_ += 2;
      lock.unlock();
      DWORD msec = usec > 0 ? (usec < 1000 ? 1 : usec / 1000) : 0;
#if defined(BOOST_ASIO_WINDOWS_APP)
      ::WaitForMultipleObjectsEx(2, events_, false, msec, false);
#else // defined(BOOST_ASIO_WINDOWS_APP)
      ::WaitForMultipleObjects(2, events_, false, msec);
#endif // defined(BOOST_ASIO_WINDOWS_APP)
      lock.lock();
      state_ -= 2;
    }
    return (state_ & 1) != 0;
  }
Ejemplo n.º 18
0
 void clear(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   (void)lock;
   state_ &= ~std::size_t(1);
 }
Ejemplo n.º 19
0
 void clear(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   (void)lock;
   signalled_ = false;
 }
Ejemplo n.º 20
0
 void wait(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   while (!signalled_)
     ::pthread_cond_wait(&cond_, &lock.mutex().mutex_); // Ignore EINVAL.
 }