c++11 unique_lock

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::try_to_lock);
            std::unique_lock<std::mutex> guard1(m_Mutex1, std::defer_lock);
            std::unique_lock<std::mutex> guard2(std::move(guard1));//移动语义
            guard2.lock();
            //if (guard1.try_lock())
            //{
            //    v.push_back(i);
            //}
           
            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;
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值