互斥对象的使用方法

来源:互联网 发布:雅米网络兼职怎么做 编辑:程序博客网 时间:2024/06/08 12:13
#include<iostream>#include<string>#include<thread>#include<mutex>using namespace std;mutex mu;void shared_print(string msg, int id){    mu.lock();    cout <<msg << id << endl;    mu.unlock();}void function_1(){    for (int i = 0; i > -10; i--)    {        shared_print("From t1:", i);        //cout << "From t1:" << i << endl;//其实竞争的是cout    }}int main(){    thread t1(function_1);    for (int i = 0; i < 10; i++)    {        shared_print("From main:", i);        //cout << "From main:" << i << endl;    }    t1.join();    return 0;}

更好的方法

#include<iostream>#include<string>#include<thread>#include<mutex>#include<fstream>using namespace std;//mutex mu;//void shared_print(string msg, int id)//{//  lock_guard<mutex> guard(mu);//  //mu.lock();//  cout <<msg << id << endl;//若出现异常,则cout会被永远的锁住//  //mu.unlock();//}class LofFile{public:    LofFile()    {        f.open("log.txt");    }    void shared_print(string id, int value)    {        lock_guard<mutex> locker(m_mutex);        f << "From" << id << ":" << value << endl;    }protected:private:    mutex m_mutex;    ofstream f;};void function_1(LofFile& log){    for (int i = 0; i > -10; i--)    {        log.shared_print("From t1:", i);        //cout << "From t1:" << i << endl;//其实竞争的是cout    }}int main(){    LofFile log;    thread t1(function_1,ref(log));    for (int i = 0; i < 10; i++)    {        log.shared_print("From main:", i);        //cout << "From main:" << i << endl;    }    t1.join();    return 0;}
原创粉丝点击