Difference between revisions of "cpp/thread/yield"
From cppreference.com
m (Use since= and until= params of {{ddcl}} template.) |
YexuanXiao (Talk | contribs) m |
||
(9 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
{{cpp/title|n=this_thread::|yield}} | {{cpp/title|n=this_thread::|yield}} | ||
{{cpp/thread/navbar}} | {{cpp/thread/navbar}} | ||
− | {{ddcl | header=thread | since=c++11 | 1= | + | {{ddcl|header=thread|since=c++11|1= |
− | void yield(); | + | void yield() noexcept; |
}} | }} | ||
Line 12: | Line 12: | ||
===Return value=== | ===Return value=== | ||
(none) | (none) | ||
+ | |||
+ | ===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 ({{tt|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, {{tt|yield}} has no effect. | ||
===Example=== | ===Example=== | ||
− | {{example | + | {{example |
− | + | |code= | |
− | + | ||
− | + | ||
#include <chrono> | #include <chrono> | ||
+ | #include <iostream> | ||
#include <thread> | #include <thread> | ||
Line 27: | Line 29: | ||
auto start = std::chrono::high_resolution_clock::now(); | auto start = std::chrono::high_resolution_clock::now(); | ||
auto end = start + us; | auto end = start + us; | ||
− | do { | + | do |
+ | { | ||
std::this_thread::yield(); | std::this_thread::yield(); | ||
− | } while (std::chrono::high_resolution_clock::now() < end); | + | } |
+ | while (std::chrono::high_resolution_clock::now() < end); | ||
} | } | ||
Line 43: | Line 47: | ||
<< " microseconds\n"; | << " microseconds\n"; | ||
} | } | ||
− | + | |p=true | |
+ | |output= | ||
waited for 128 microseconds | waited for 128 microseconds | ||
}} | }} | ||
− | + | ===See also=== | |
− | + | {{dsc begin}} | |
− | + | {{dsc see c|c/thread/thrd_yield}} | |
− | + | {{dsc end}} | |
− | + | ||
− | + | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} | |
− | + | ||
− | + |
Latest revision as of 02:35, 7 October 2024
Defined in header <thread>
|
||
void yield() noexcept; |
(since C++11) | |
Provides a hint to the implementation to reschedule the execution of threads, allowing other threads to run.
Contents |
[edit] Parameters
(none)
[edit] Return value
(none)
[edit] 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.
[edit] Example
Run this code
#include <chrono> #include <iostream> #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
[edit] See also
C documentation for thrd_yield
|