std::thread 二:互斥量(lock_guard())

*:使用 lock_guard 后,就不可以使用 lock() 和 unlock()
*:lock_guard 和智能指针一样,会自动解锁
 
#include <iostream>
#include <thread>
#include <mutex>
#include <list>
using namespace std;

class A
{
public:
    void inNum()
    {
        for (int i = 0; i < 10000; i++)
        {
            m_mutex.lock();

            num_list.push_back(i);
            cout << "正在写:" << i << endl;

            m_mutex.unlock();
        }
    }

    void outNum()
    {
        for (int i = 0; i < 10000; i++)
        {
            if (!num_list.empty())
            {
                lock_guard<mutex> myguard(m_mutex);

                int temp_num = num_list.front();
                num_list.pop_front();
                cout << "正在读数据,当前数据:" << temp_num << endl;
            }
            else
            {
                cout << "正在读数据,当前数据:为空" << endl;
            }
        }
    }

    void parintListCount()
    {
        cout << "列表中剩余数量:" << num_list.size() << endl;
    }

private:
    list<int> num_list;
    mutex m_mutex;            // 创建一个互斥量
};



int main()
{
    A a;
    thread tIn(&A::inNum, &a);
    thread tOut(&A::outNum, &a);

    tIn.join();
    tOut.join();

    a.parintListCount();

    return 0;
}

 

 
 
 
 
 
 
posted @ 2023-06-18 23:00  十一的杂文录  阅读(10)  评论(0编辑  收藏  举报