日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

        歡迎訪問 生活随笔!

        生活随笔

        當前位置: 首頁 >

        c语言线程锁的原理开锁原理图,C++多线程之可重入锁

        發布時間:2023/12/15 36 豆豆
        生活随笔 收集整理的這篇文章主要介紹了 c语言线程锁的原理开锁原理图,C++多线程之可重入锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

        #include

        #include

        #include

        using namespace std;

        recursive_mutex re;

        void task1()

        {

        re.lock();

        cout << "處理任務1中..." << endl;

        std::this_thread::sleep_for(1s);

        re.unlock();

        }

        void task2()

        {

        re.lock();

        cout << "處理任務2中..." << endl;

        std::this_thread::sleep_for(1s);

        re.unlock();

        }

        class ThreadBase

        {

        public:

        virtual void Start()

        {

        is_exit = false;

        th = std::thread(&ThreadBase::Main,this);

        }

        virtual void Stop()

        {

        is_exit = true;

        Wait();

        }

        virtual void Wait()

        {

        if (th.joinable())

        {

        th.join();

        }

        }

        bool get_exit()

        {

        return is_exit;

        }

        virtual void Main() = 0;

        ThreadBase(int _i):i(_i) {}

        virtual ~ThreadBase() {}

        int i;

        private:

        std::thread th;

        bool is_exit;

        };

        class MyThread:public ThreadBase

        {

        public:

        MyThread(int i):ThreadBase(i) {}

        ~MyThread() override {}

        void Main() override

        {

        for (;;)

        {

        //如果不是可重入鎖,那么得先開鎖然后才能執行task1,否則會造成死鎖

        //但是如果開鎖,也就是在一個線程執行任務時,另一個線程也進來了,如果另一個線程執行了一會就結束了,肯定會

        //釋放鎖,而實際上線程一的任務還沒執行完

        re.lock();

        cout << "線程" << i << "拿到了鎖" << endl;

        task1();

        task2();

        re.unlock();

        std::this_thread::sleep_for(1ms);

        }

        }

        };

        int main(int argc,char* argv[])

        {

        MyThread th_one(1);

        th_one.Start();

        th_one.Wait();

        getchar();

        return 0;

        }

        原文:https://www.cnblogs.com/SunShine-gzw/p/14530107.html

        總結

        以上是生活随笔為你收集整理的c语言线程锁的原理开锁原理图,C++多线程之可重入锁的全部內容,希望文章能夠幫你解決所遇到的問題。

        如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。