c++11 unique_lock
#include <iostream>
#include <thread>
#include<vector>
#include <mutex>
#include <list>
#include <chrono>
class A {
public:
void in()
{
for (int i = 0; i < 100000; i++)
{
std::cout << "in执行,插入一个元素" <<i<< std::endl;
std::unique_lock<std::mutex> guard1(m_Mutex1, std::defer_lock);
std::unique_lock<std::mutex> guard2(std::move(guard1));
guard2.lock();
if (guard2.owns_lock())
{
v.push_back(i);
}
else {
std::cout << "in函数没有拿到锁" << std::endl;
}
std::mutex* ptr = guard2.release();
m_Mutex1.unlock();
}
}
bool outproc(int& com)
{
std::unique_lock<std::mutex> guard1(m_Mutex1);
std::chrono::seconds dura(1);
std::this_thread::sleep_for(dura);
if (!v.empty())
{
com = v.front();
v.pop_front();
return true;
}
return false;
}
void out()
{
int command = 0;
for (int i = 0; i < 100000; i++)
{
bool result = outproc(command);
if (result)
{
std::cout << "out执行,取出一个元素" << command << std::endl;
}
else {
std::cout << "out执行,但是队列为空" << i << std::endl;
}
}
}
private:
std::mutex m_Mutex1;
std::list<int> v;
};
int main() {
A a;
std::thread myinobj(&A::in, &a);
std::thread myoutobj(&A::out,&a);
myinobj.join();
myoutobj.join();
return 0;
}