社区
C++ 语言
帖子详情
多线程锁的效率
星爷是我哥
2014-05-29 11:31:22
最近使用多线程加锁,发现有时会互相等待,有点费时,于是我用while死循环加sleep去当锁。。
我就想,加锁是不是类似中断,CPU保存运行环境,得到锁时再加入来运行,而我用while加sleep,是一直在运行sleep是睡眠线程,,
这两种方式哪种的效率要高一些呢。。
若有什么理解错误,请大家指出。。。
...全文
418
9
打赏
收藏
多线程锁的效率
最近使用多线程加锁,发现有时会互相等待,有点费时,于是我用while死循环加sleep去当锁。。 我就想,加锁是不是类似中断,CPU保存运行环境,得到锁时再加入来运行,而我用while加sleep,是一直在运行sleep是睡眠线程,, 这两种方式哪种的效率要高一些呢。。 若有什么理解错误,请大家指出。。。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mujiok2003
2014-05-29
打赏
举报
回复
1. 线程上下切换代价很高, 尽量减少。 可以使用条件变量+ 互斥量实现:条件不满足是, 让出CPU; 在条件满足时唤醒。 2. 锁的底层是CPU指令,和内存模型相关, 不同CPU指令不同。 和中断不是一回事。
要追问请引用回复
2014-05-29
打赏
举报
回复
如果这样可以替代锁的话,windows为什么还要费时费力的去实现各种锁呢? 真正的锁是触发式的,条件一满足,会立刻调度线程。而使用Sleep,无论粒度有多小,总是会有延迟的。Sleep频度越快,越占用cpu;sleep频度越低,越不精确。 内核有益中锁是自旋锁,大致上是这么个原理。但那时用来在多个cpu之间同步,而且要求等待的时间要很短才可以。
mujiok2003
2014-05-29
打赏
举报
回复
引用
于是我用while死循环加sleep去当锁。
千万不要这么做, 不可能替换锁。
ningto.com
2014-05-29
打赏
举报
回复
sleep一般使用在调试环境中
不要做咸鱼
2014-05-29
打赏
举报
回复
sleep是不会使用CPU的,当sleep时间过后他会自动排队去等待CPU 没有看过互斥锁的源码,但是效率上应该差不多吧
赵4老师
2014-05-29
打赏
举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
sdghchj
2014-05-29
打赏
举报
回复
一样的,sleep的时间里,cpu可以去执行其它线程或进程。
星爷是我哥
2014-05-29
打赏
举报
回复
谢谢大家,,总结为:不要干系统干了的事,微软比我牛X了N倍。。
zilaishuichina
2014-05-29
打赏
举报
回复
使用锁 绝对比你 sleep好 一般windows下 常用的CRITICAL_SECTION,mutex 如果lz觉得锁的等待时间太长,1可以缩小锁住的代码段的范围,2可以使用TryEnterCriticalSection,该函数不阻塞
下载 多线程编程技术开发资料 高清完整PDF版
多线程编程技术开发资料.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
C++多线程同步
效率
对比之临界区和原子锁
多线程编程经常遇到数据同步问题,通常的做法就是
浅谈多线程编程以及锁的
效率
测试
锁在多线程应用上非常广泛,虽然这个影响
效率
,但这也是在不影响计算结果上最直观的方法了。多线程编程主要有四种思路,一种是加锁,一种是无锁式编程,一种是 STM 软件事务内存,一种是使用 Erlang 等函数式编程语言。
【
效率
对比】c++多线程同步几种方式的
效率
对比研究: 原子操作,c++锁,自旋锁,windows临界区,windows互斥对象
通过比较以下几种同步方式,测试各方法
效率
,分为以下6种情况做对比: 不加任何同步措施; Windows原子操作; c++11 mutrex; 自定义的自旋锁CLCS; Windows临界区; Windows互斥对象; 硬件平台:AMD 8核16线程,内存16GB 系统/软件平台:windows10,vs2019com(vc++); 方法:定义3个变量,在多线程中自加(16线程x10万次),记录...
C++多线程:锁管理(lock)
对于多线程,无法避免要使用到锁对共享资源的保护,这一节我们就来学习现代C++对于锁的管理(lock),上一节我们已经学习了现代C++对应的mutex,直到C++17,一共有六种类型。而今天学习的锁管理,与mutex息息相关,它们都是使用RAII风格来进行锁管理,主要有下面几种:std::lock_guard(C++11)std::unique_lock(C++11)std::share_lock(C++14)std::scoped_lock(C++17)首先来简单解释一下RAII这个名称的意思:❝「RAII
C++ 语言
65,184
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章