Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::atomic_wait,std::atomic_wait_explicit

      From cppreference.com
      <cpp‎ |atomic
       
       
      Concurrency support library
      Threads
      (C++11)
      (C++20)
      this_thread namespace
      (C++11)
      (C++11)
      (C++11)
      Cooperative cancellation
      Mutual exclusion
      Generic lock management
      (C++11)
      (C++11)
      (C++11)
      (C++11)
      Condition variables
      (C++11)
      Semaphores
      Latches and Barriers
      (C++20)
      (C++20)
      Futures
      (C++11)
      (C++11)
      (C++11)
      Safe reclamation
      Hazard pointers
      Atomic types
      (C++11)
      (C++20)
      Initialization of atomic types
      (C++11)(deprecated in C++20)
      (C++11)(deprecated in C++20)
      Memory ordering
      (C++11)(deprecated in C++26)
      Free functions for atomic operations
      atomic_waitatomic_wait_explicit
      (C++20)(C++20)
      Free functions for atomic flags
       
      Defined in header<atomic>
      template<class T>

      void atomic_wait(conststd::atomic<T>* object,

                       typenamestd::atomic<T>::value_type old);
      (1)(since C++20)
      template<class T>

      void atomic_wait(constvolatilestd::atomic<T>* object,

                       typenamestd::atomic<T>::value_type old);
      (2)(since C++20)
      template<class T>

      void atomic_wait_explicit(conststd::atomic<T>* object,
                                 typenamestd::atomic<T>::value_type old,

                                 std::memory_order order);
      (3)(since C++20)
      template<class T>

      void atomic_wait_explicit(constvolatilestd::atomic<T>* object,
                                 typenamestd::atomic<T>::value_type old,

                                 std::memory_order order);
      (4)(since C++20)

      Performs atomic waiting operations. Behaves as if it repeatedly performs the following steps:

      • Compare thevalue representation ofobject->load() (for overloads(1,2)) orobject->load(order) (for overloads(3,4)) with that ofold.
        • If those are bitwise equal, then blocks until*object is notified bystd::atomic::notify_one() orstd::atomic::notify_all(), or the thread is unblocked spuriously.
        • Otherwise, returns.

      These functions are guaranteed to return only if value has changed, even if the underlying implementation unblocks spuriously.

      1,2) Equivalent toobject->wait(old).
      3,4) Equivalent toobject->wait(old, order).
      Iforder is one ofstd::memory_order::release andstd::memory_order::acq_rel, the behavior is undefined.

      Contents

      [edit]Parameters

      object - pointer to the atomic object to check and wait on
      old - the value to check the atomic object no longer contains
      order - the memory synchronization ordering

      [edit]Return value

      (none)

      [edit]Notes

      This form of change-detection is often more efficient than simple polling or pure spinlocks.

      Due to theABA problem, transient changes fromold to another value and back toold might be missed, and not unblock.

      The comparison is bitwise (similar tostd::memcmp); no comparison operator is used. Padding bits that never participate in an object's value representation are ignored.

      [edit]Example

      This section is incomplete
      Reason: no example

      [edit]See also

      (C++20)
      blocks the thread until notified and the atomic value changes
      (public member function ofstd::atomic<T>)[edit]
      (C++20)
      notifies at least one thread waiting on the atomic object
      (public member function ofstd::atomic<T>)[edit]
      (C++20)
      notifies all threads blocked waiting on the atomic object
      (public member function ofstd::atomic<T>)[edit]
      notifies a thread blocked in atomic_wait
      (function template)[edit]
      notifies all threads blocked in atomic_wait
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/atomic/atomic_wait&oldid=177267"

      [8]ページ先頭

      ©2009-2025 Movatter.jp