#include<thread>
#include<mutex>
#include<iostream>
using namepspace std;
void print(const std::string &s)
{
    cout << s << endl;
}
int main() {
    std::mutex m1;
    std::mutex m2;
    std::thread t1([&] {
        print("From T1");
        m1.lock(); //locking m1 first
        print("From T1");
        m2.lock(); //locking m2 second
    });
    std::thread t2([&] {
        print("From T2");
        m2.lock(); //lcoking m2 first
        print("From T2");
        m1.lock(); //locking m1 second
    });

    t1.join();
    t2.join();
}