C++ Library - <stop_token>



The <stop_token> header in C++20, introduces a mechanism for cancellation of threads and asynchronous operations. It works in conjunction with the std::stop_source, which is responsible for generating stop requests.

These are used to implement a responsive systems that can halt operations without the need for forceful termination or complicated signaling mechanism.

Including <stop_token> Header

To include the <stop_token> header in your C++ program, you can use the following syntax.

#include <stop_token>

Functions of <stop_token> Header

Below is list of all functions from <stop_token> header.

Sr.No Functions & Description
1 operator=

It assigns the stop_token object.

2 swap

It swaps two stop_token objects.

3 stop_requested

It checks whether the associated stop-state has been requested to stop.

4 stop_possible

It checks whether associated stop-state can be requested to stop.

5 get_token

It returns a stop_token for the associated stop-state.

Using Multiple Threads with Stop Tokens

In the following example, we are going to use the std::stop_source to control the multiple threads.

#include <iostream>
#include <thread>
#include <stop_token>
#include <chrono>
void a(int id, std::stop_token b) {
   while (!b.stop_requested()) {
      std::cout << "A " << id << " Is Working.." << std::endl;
      std::this_thread::sleep_for(std::chrono::milliseconds(600));
   }
   std::cout << "A " << id << " Is Cancelled.." << std::endl;
}
int main() {
   std::stop_source x;
   std::thread x1(a, 1, x.get_token());
   std::thread x2(a, 2, x.get_token());
   std::this_thread::sleep_for(std::chrono::seconds(2));
   x.request_stop();
   x1.join();
   x2.join();
   return 0;
}

Output

Output of the above code is as follows −

A 2 Is Working..
A 1 Is Working..
A 2 Is Working..
A 1 Is Working..
A 2 Is Working..
A 1 Is Working..
A 2 Is Working..
A 1 Is Working..
A 2 Is Cancelled..
A 1 Is Cancelled..
Advertisements
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy