SpaceCreator

pingpong_v2

Apr 20th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <thread>
  3. #include <mutex>
  4. #include <condition_variable>
  5.  
  6. std::mutex m1;
  7. std::mutex m2;
  8.  
  9. void bar(){
  10.     std::unique_lock <std::mutex> lock2(m2, std::defer_lock);
  11.     std::unique_lock <std::mutex> lock1(m1, std::defer_lock);
  12.     for(size_t i = 0; i < 500000; ++i) {
  13.         if(lock1.try_lock()){
  14.             printf("pong\n");
  15.             lock2.unlock();
  16.         }
  17.         std::this_thread::yield();
  18.     }
  19. }
  20.  
  21. void foo(){
  22.     std::unique_lock <std::mutex> lock1(m1);
  23.     std::unique_lock <std::mutex> lock2(m2, std::defer_lock);
  24.     for(size_t i = 0; i < 500000; ++i) {
  25.         if(lock2.try_lock()){
  26.             printf("ping\n");
  27.             lock1.unlock();
  28.         }
  29.         std::this_thread::yield();
  30.     }
  31. }
  32.  
  33. int main(int argc, char const *argv[]) {
  34.     std::thread T1 (foo);
  35.     T1.detach();
  36.     std::thread T2 (bar);
  37.     T2.join();
  38.     return 0;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment