Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/thread/yield"

From cppreference.com
< cpp‎ | thread
m (See also C documentation)
m (Text replace - "{{noexcept" to "{{unreviewed noexcept")
Line 14: Line 14:
  
 
===Exceptions===
 
===Exceptions===
{{noexcept}}
+
{{unreviewed noexcept}}
  
 
===Notes===
 
===Notes===

Revision as of 11:50, 31 March 2017

 
 
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
yield
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
(C++11)
Generic lock management
(C++11)
(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)
(C++11)
Safe Reclamation
(C++26)
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
Free functions for atomic operations
Free functions for atomic flags
 
Defined in header <thread>
void yield();
(since C++11)

Provides a hint to the implementation to reschedule the execution of threads, allowing other threads to run.

Contents

Parameters

(none)

Return value

(none)

Exceptions

noexcept specification:  
noexcept
  

Notes

The exact behavior of this function depends on the implementation, in particular on the mechanics of the OS scheduler in use and the state of the system. For example, a first-in-first-out realtime scheduler (SCHED_FIFO in Linux) would suspend the current thread and put it on the back of the queue of the same-priority threads that are ready to run (and if there are no other threads at the same priority, yield has no effect).

Example

#include <iostream>
#include <chrono>
#include <thread>
 
// "busy sleep" while suggesting that other threads run 
// for a small amount of time
void little_sleep(std::chrono::microseconds us)
{
    auto start = std::chrono::high_resolution_clock::now();
    auto end = start + us;
    do {
        std::this_thread::yield();
    } while (std::chrono::high_resolution_clock::now() < end);
}
 
int main()
{
    auto start = std::chrono::high_resolution_clock::now();
 
    little_sleep(std::chrono::microseconds(100));
 
    auto elapsed = std::chrono::high_resolution_clock::now() - start;
    std::cout << "waited for "
              << std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count()
              << " microseconds\n";
}

Possible output:

waited for 128 microseconds

See also

C documentation for thrd_yield