Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <thread>
- #include <mutex>
- #include <condition_variable>
- std::mutex m1;
- std::mutex m2;
- void bar(){
- std::unique_lock <std::mutex> lock2(m2, std::defer_lock);
- std::unique_lock <std::mutex> lock1(m1, std::defer_lock);
- for(size_t i = 0; i < 500000; ++i) {
- if(lock1.try_lock()){
- printf("pong\n");
- lock2.unlock();
- }
- std::this_thread::yield();
- }
- }
- void foo(){
- std::unique_lock <std::mutex> lock1(m1);
- std::unique_lock <std::mutex> lock2(m2, std::defer_lock);
- for(size_t i = 0; i < 500000; ++i) {
- if(lock2.try_lock()){
- printf("ping\n");
- lock1.unlock();
- }
- std::this_thread::yield();
- }
- }
- int main(int argc, char const *argv[]) {
- std::thread T1 (foo);
- T1.detach();
- std::thread T2 (bar);
- T2.join();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment