64,648
社区成员
发帖
与我相关
我的任务
分享
#include <mutex>
#include <thread>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
class Manager
{
public:
Manager()
{
const auto expression = [&]()->void {return threadProc(); };
thread(expression).detach();
}
~Manager() {}
void addData(int num)
{
if (m_data.lock())
m_data.data.push_back(num);
}
private:
struct
{
vector<int> data;
unique_lock<mutex> lock()
{
return unique_lock<mutex>(m);
}
private:
mutex m;
}m_data;
void threadProc()
{
while (true)
{
if (m_data.lock())
{
for_each(m_data.data.begin(), m_data.data.end(), [](int num)
{
cout << num << endl;
});
m_data.data.clear();
}
}
}
};
int main()
{
Manager manager;
manager.addData(1);
system("pause");
}
std::mutex mtx;
unique_lock<mutex> lock()
{
return unique_lock<mutex>(mtx);
}
void print_block (int n, char c) {
unique_lock<mutex> mmm;
if(lock())//使用这句 注掉下面一句 * $ 混在一起
//if(mmm=lock())//使用这句 注掉上面一句 * $ 不混在一起
{
for (int i=0; i<n; ++i) { std::cout << c; }
std::cout << '\n';
}
}
int main2 ()
{
std::thread th1 (print_block,500,'*');
std::thread th2 (print_block,500,'$');
th1.join();
th2.join();
return 0;
}