首页 > 编程语言 >使用 C++11 原子类型 `std::atomic_flag` 实现的自旋锁

使用 C++11 原子类型 `std::atomic_flag` 实现的自旋锁

时间:2023-10-02 11:11:08浏览次数:40  
标签:11 std C++ flag atomic 自旋

使用 C++11 原子类型 std::atomic_flag 实现的自旋锁:

#include <atomic>

class Spinlock {
public:
    Spinlock(): flag(ATOMIC_FLAG_INIT) {}

    void lock() {
        while (flag.test_and_set(std::memory_order_acquire));
    }

    void unlock() {
        flag.clear(std::memory_order_release);
    }

private:
    std::atomic_flag flag;
};

标签:11,std,C++,flag,atomic,自旋
From: https://www.cnblogs.com/BuzzWeek/p/17739788.html

相关文章

  • P1144 最短路计数 题解
    Problem考察算法:拓扑排序+\(DP\)+\(Dijkstra\)。题目简述给出一个无向无权图,问从顶点\(1\)开始,到其他每个点的最短路有几条。思路先求出\(1\)号点到每个点的最短路\(d_i\)。分析每条边$(x,y)$:如果d[x]+1==d[y]:这条边有用。将所有有用的边拓扑排序......
  • 2023-2024-1 20231411 《计算机基础与程序设计》第一周学习总结
    作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计第一周作业这个作业的目标初步熟悉课本以及对所学内容有所思考作业正文本博客教材学习内容总结本书涉及计算机科学的方方面面,介绍了计......
  • c++ boost库安装与测试
    1、从官网http://www.boost.org/users/download/下载最新版本的boost,如boost_1_65_02、解压tarxzvfboost_1_65_0.tar.gz,3、安装cdboost_1_65_0/./bootstrap.shsudo./b2install 4、测试boost,以any类型和uuid为例。#include<iostream>#include<list>#include<ve......
  • c/c++获取uuid
    c/c++标准库中没有自带的uuid工具函数/类,可以使用三方库libuuid,boost,或者手工实现,如下:[zjh@hs-10-20-xxxlib]$sudoyuminstalllibuuid-devel[sudo]passwordforzjh:Loadedplugins:fastestmirror,langpacksLoadingmirrorspeedsfromcachedhostfilebase......
  • 20211301 学习笔记4
    学习笔记4教材知识总结7.1文件操作级别文件操作:分为5个级别(从高到低如下)硬件级别:fdisk(硬盘、U盘、sdc盘分区mkfs:格式化磁盘分区,为系统做好准备fsck:检查和维修系统碎片整理:压缩文件系统中的文件操作系统内核中的文件系统函数系统调用I/O库函数用户命令......
  • C++中mutable关键字学习
    转自:https://liam.page/2017/05/25/the-mutable-keyword-in-Cxx/,讲的很好。1.介绍mutable即可变的,mutable只能用来修饰类的数据成员;而被mutable修饰的数据成员,可以在const成员函数中修改。例子:classHashTable{public://...std::stringlookup(conststd::......
  • 在VS Code中配置C/C++
    之前因为学了一点html,所以下了一个VSCode来写html代码。今天要写C++的代码,以前都是用VS写的。但是突然想了一下既然都装了VSCode,为啥不配置一下。配置好了后以后写C/C++代码也不用打开繁重的VS了。而且VSCode还能加很多插件。说干就干,上网找了资料,终于配置好了。还是有蛮多坑......
  • P1119 灾后重建
    题目传送:链接思路算法:\(Floyd.\)每次询问记录一个变量\(n\),表示当前遍历到哪个点。当\(t_n<=T\)的时候,利用\(n\)点更新到$(x,y)$点的最短路。如果发现\(x,y\)点其中有一个还没有修好,或者是\(d_{x_y}\)为0x3f3f3f3f,就输出\(-1\)。代码#include<bits/s......
  • 20211128《信息安全系统设计与实现》第七、八章笔记
    一、任务内容自学教材第7,8章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT......
  • P1126 机器人搬重物 题解
    Problem题目概括$n\timesm$的网格,有些格子是障碍格。\(0\)无障碍,\(1\)有障碍。机器人有体积,总是在格点上。有5种操作:向前移动\(1/2/3\)步左转\(/\)右转每次操作需要\(1\)秒。求从\(x_1,y_1\)到\(x_2,y_2\)点的最短路。机器人有一个初始方向$......