#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;
}