fork download
  1. #include <atomic>
  2. #include <thread>
  3. #include <chrono>
  4. #include <iostream>
  5. #include <pthread.h>
  6.  
  7. class cancellation_token {
  8. public:
  9. cancellation_token() : status(false) {}
  10.  
  11. bool is_cancelled() const { return status.load(std::memory_order_acquire); }
  12.  
  13. void cancel() { status.store(true, std::memory_order_release); }
  14.  
  15. private:
  16. std::atomic<bool> status;
  17. };
  18.  
  19. int main() {
  20. cancellation_token token;
  21. std::thread t([&token]{
  22. std::cout << "I'm in your thread\n";
  23. while(!token.is_cancelled()) {
  24. std::cout << "foo\n";
  25. }
  26. });
  27. pthread_yield();
  28. for(int i = 0; i < 100; ++i) std::cout << "bar\n";
  29. token.cancel();
  30. std::cout << "done\n";
  31. t.join();
  32. }
  33.  
Success #stdin #stdout 0s 11264KB
stdin
Standard input is empty
stdout
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
bar
done
I'm in your thread