码迷,mamicode.com
首页 > 其他好文 > 详细

spin_lock自旋锁

时间:2020-06-24 20:00:25      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:flag   --   test   void   ini   var   vat   div   store   

#include <string>
#include <iostream>
#include <thread>
#include <atomic>

class spin_lock{
private:
    std::atomic<bool> flag = ATOMIC_VAR_INIT(false);
public:
    spin_lock() = default;
    spin_lock(const spin_lock&) = delete;
    spin_lock& operator = (const spin_lock&) = delete;

    void lock() {
        bool expected = false;
        while (!flag.compare_exchange_strong(expected, true)) {
            expected = false;
        }
    }
    void unlock() {
        flag.store(false);
    }
};

int g_test = 0;
spin_lock g_spinlck;

void work(int& thread_no) {
    for (int i = 0;i < 1000;i++) {
        g_spinlck.lock();
        g_test++;
        std::cout << "thread_no : " << thread_no  << " ; g_test : " << g_test << std::endl;
        g_spinlck.unlock();
    }
}

int main()
{
    int thread_no0 = 0;
    int thread_no1 = 1;
    std::thread thd1(work, std::ref(thread_no0));
    std::thread thd2(work, std::ref(thread_no1));

    thd1.join();
    thd2.join();
    return 0;
}

spin_lock自旋锁

标签:flag   --   test   void   ini   var   vat   div   store   

原文地址:https://www.cnblogs.com/tongyishu/p/13189078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!