在多线程开发中,常遇到共享数据需要保护的问题,我们可以使用互斥量std::mutext类来解决这个问题,示例如下
#include <chrono>
#include <iostream>
#include <mutex>
#include <thread>
#include <vector>
struct scoped_mutex
{
scoped_mutex(std::mutex& mtx)
: mt(mtx)
{
mt.lock();
}
~scoped_mutex()
{
mt.unlock();
}
private:
std::mutex& mt;
};
std::vector<int> datas;
std::mutex mtx;
void func()
{
for (int i = 0; i < 3000; i++)
{
scoped_mutex sm(mtx);
datas.push_back(i);
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
}
int main()
{
std::thread th(func);
th.detach();
do {
std::this_thread::sleep_for(std::chrono::milliseconds(20));
scoped_mutex sm(mtx);
int n = datas.size();
if (n >= 3000)
break;
std::cout << "n=" << n << std::endl;
} while (true);
std::cout << "i will be back!\n";
return 0;
}