社区
C++ 语言
帖子详情
多线程锁的效率
星爷是我哥
2014-05-29 11:31:22
最近使用多线程加锁,发现有时会互相等待,有点费时,于是我用while死循环加sleep去当锁。。
我就想,加锁是不是类似中断,CPU保存运行环境,得到锁时再加入来运行,而我用while加sleep,是一直在运行sleep是睡眠线程,,
这两种方式哪种的效率要高一些呢。。
若有什么理解错误,请大家指出。。。
...全文
391
9
打赏
收藏
多线程锁的效率
最近使用多线程加锁,发现有时会互相等待,有点费时,于是我用while死循环加sleep去当锁。。 我就想,加锁是不是类似中断,CPU保存运行环境,得到锁时再加入来运行,而我用while加sleep,是一直在运行sleep是睡眠线程,, 这两种方式哪种的效率要高一些呢。。 若有什么理解错误,请大家指出。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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,该函数不阻塞
JAVA多线程精讲下
本课程是《零基础学Java》系列课程中的"多线程"相关课程.授课形式延续了之前课程的授课风格。内容细腻、详尽,由浅入深!通过本门课程的学习你可以深刻理解Java多线程的原理及实现运行机制,深刻学习多线程的生命...
C++多线程同步
效率
对比之临界区和原子锁
多线程编程经常遇到数据同步问题,通常的做法就是
浅谈多线程编程以及锁的
效率
测试
锁在多线程应用上非常广泛,虽然这个影响
效率
,但这也是在不影响计算结果上最直观的方法了。多线程编程主要有四种思路,一种是加锁,一种是无锁式编程,一种是 STM 软件事务内存,一种是使用 Erlang 等函数式编程...
C++多线程:锁管理(lock)
对于多线程,无法避免要使用到锁对共享资源的保护,这一节我们就来学习现代C++对于锁的管理(lock),上一节我们已经学习了现代C++对应的mutex,直到C++17,一共有六种类型。而今天学习的锁管理,与mutex息息相关,...
Java多线程(四)
线程锁
Java多线程(四)
线程锁
C++ 语言
64,682
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章