#include #include #include #include using namespace std::chrono_literals; void task(std::mutex& mutex_A, std::mutex& mutex_B) { mutex_A.lock(); std::this_thread::sleep_for(10ms); mutex_B.lock(); auto id = std::this_thread::get_id(); std::cout << id << std::endl; mutex_B.unlock(); mutex_A.unlock(); } int main() { std::mutex mutex_A { }; std::mutex mutex_B { }; std::thread t1 { task, std::ref(mutex_A), std::ref(mutex_B) }; std::thread t2 { task, std::ref(mutex_B), std::ref(mutex_A) }; t1.join(); t2.join(); }