参见 《深入理解C++11》

#include <thread>
#include <atoimic>
#include <iostream>
#include <unistd.h>
using namespace std;std::atomic_flag lock = ATOMIC_FLAG_INIT;
void f(int n) {while (lock.test_and_set(std::memory_order_acquire)) { // 尝试获得锁cout << "Waiting" << endl;                         // 等待}cout << "thread: " << n << endl;
}void g(int n) {cout << "thread " << n << " is going to start. " << endl;lock.clear();cout << "thread " << n << " starts working" << endl;
}int main() {lock.test_and_set();thread t1(f, 1);thread t2(g, 2);t1.join();usleep(100);t2.join();
}

封装

void Lock(atomic_flag lock) {while(lock.test_and_set());
}void UnLock(atomic_flag lock) {lock.clear();
}

C++11实现自旋锁相关推荐

  1. 自旋锁与互斥锁的对比、手工实现自旋锁

    自旋锁与互斥锁的对比.手工实现自旋锁 版权声明:本文为博主原创文章,转载请注明出处,谢谢. https://blog.csdn.net/FreeeLinux/article/details/53695 ...

  2. 利用C++11原子量atomic实现自旋锁详解

    一.自旋锁 自旋锁是一种基础的同步原语,用于保障对共享数据的互斥访问.与互斥锁的相比,在获取锁失败的时候不会使得线程阻塞而是一直自旋尝试获取锁.当线程等待自旋锁的时候,CPU不能做其他事情,而是一直处 ...

  3. java多线程之锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁

    转载至:https://blog.csdn.net/zqz_zqz/article/details/70233767 之前做过一个测试,详情见这篇文章<多线程 +1操作的几种实现方式,及效率对比 ...

  4. 《多处理器编程的艺术》读书笔记(4)--- 自旋锁(1)

    任何互斥协议都会产生这样的问题:如果不能获得锁,应该怎么做?对此有两种选择.其一种方案是让其继续进行尝试,这种锁称为自旋锁,对锁的反复测试过程称为旋转或忙等待.在希望锁延迟较短的情形下,选择旋转的方式 ...

  5. 自旋锁spinlock解析

    1 基础概念 自旋锁与相互排斥锁有点类似,仅仅是自旋锁不会引起调用者睡眠.假设自旋锁已经被别的运行单元保持.调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁."自旋"一词就 ...

  6. Linux内核的同步机制---自旋锁

    自旋锁的思考:http://bbs.chinaunix.net/thread-2333160-1-1.html 近期在看宋宝华的<设备驱动开发具体解释>第二版.看到自旋锁的部分,有些疑惑. ...

  7. Linux 内核同步(二):自旋锁(Spinlock)

    自旋锁 内核当发生访问资源冲突的时候,可以有两种锁的解决方案选择: 一个是原地等待 一个是挂起当前进程,调度其他进程执行(睡眠) Spinlock 是内核中提供的一种比较常见的锁机制,自旋锁是&quo ...

  8. 1.6的锁优化(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)

    高效并发是JDK 1.6的一个重要主题,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning).锁削除(Lock Elimin ...

  9. JVM中锁优化,偏向锁、自旋锁、锁消除、锁膨胀

    本文将简单介绍HotSpot虚拟机中用到的锁优化技术. 自旋锁 互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性能带来了很大的压力.而在很多 ...

最新文章

  1. 计算机组成原理名词解释常用,2018考研408计算机组成原理名词解释(3)
  2. Vue项目SSR改造实战
  3. OpenGL 纹理Textures
  4. 提升你的职场竞争力——“低代码开发师”来了!
  5. android okhttp使用cookie请求
  6. 复习.net/c#时的小文章之万年草稿版 (全是基础概念,请懂的人绕行)
  7. 浅谈JSP自定义标签实现过程
  8. 一道简单的题学到的东西
  9. 数据库原理及应用教程课后习题答案 第4版 微课版 陈志泊主编
  10. vue 播放.aac格式的音频文件
  11. 删除下拉框只找23火星软件_下拉框找20火星软件
  12. JAVA对接圆通API
  13. 记一次Pr安装转场插件导致AE报错问题解决
  14. 六、DDE服务器函数
  15. 2008服务器系统开启ftp,win 2008服务器开启FTP功能
  16. 计算机怎么看事件管理,win7系统事件查看器怎么打开
  17. 中国石油大学《计算机应用基础》第三次在线作业
  18. android 主流框架与技术
  19. 关于客户机服务器与微内核结构操作系统,第1章 操作系统概述1
  20. linux删除配置信息,linux 配置信息

热门文章

  1. c++ 多核cpu序列号_详解CPU几个重点基础知识
  2. java获取默认用户目录_Java获取当前路径
  3. java物业管理系统设计,JAVA物业管理系统设计与实现(论文+源代码)
  4. CSS border-radius边框圆角
  5. 构建前端自动化工作流环境
  6. CSS的position属性:relative和absolute
  7. css 小知识点:inline/inline-block/line-height
  8. Javascript执行上下文和执行栈
  9. django 日志配置
  10. 其他团队对本团队评价的总结