社区
C++ 语言
帖子详情
多线程锁的效率
星爷是我哥
2014-05-29 11:31:22
最近使用多线程加锁,发现有时会互相等待,有点费时,于是我用while死循环加sleep去当锁。。
我就想,加锁是不是类似中断,CPU保存运行环境,得到锁时再加入来运行,而我用while加sleep,是一直在运行sleep是睡眠线程,,
这两种方式哪种的效率要高一些呢。。
若有什么理解错误,请大家指出。。。
...全文
516
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,该函数不阻塞
浅谈多线程编程以及锁的
效率
测试
锁在多线程应用上非常广泛,虽然这个影响
效率
,但这也是在不影响计算结果上最直观的方法了。多线程编程主要有四种思路,一种是加锁,一种是无锁式编程,一种是 STM 软件事务内存,一种是使用 Erlang 等函数式编程语言。
java多线程(七)提高锁的
效率
——使用读写锁
之前我们讲过ReentrantLock,这种锁不区分读操作和写操作,如果有一个线程在执行读操作,那么其他的所有的线程不能进行任何的读操作或者写操作。这样可以保证程序的互斥性,但是降低了程序的并发性,使执行
效率
降低,没有有效的发挥多线程的优势。比如说,有一个系统,主要是以读操作为主,比如有10个线程负责读数据,只有一个线程负责写数据。如果用我们之前的ReentrantLock方法,这10个线程中没有
多线程《一》读写锁提高锁的
效率
读写锁的作用为什么要用读写锁我们都知道,读写锁可以提高
效率
,但是怎么提高
效率
呢? 我们通常说到读写锁的时候就会说:读数据的时候用读锁,写数据的时候,用写锁,读锁是共享锁,也就是说,可以一起去读数据相互之间不影响,和没上锁,好像也没什么区别。 写锁是排它锁,当一个线程进入到写锁之后,那么其它的线程,就都只能等待了。 上面说到读取数据的时候用读锁,好像和没上锁,没什么区别?真的没区别吗?答案肯定...
死锁现象与递归锁 信号量 GIL全局解释器锁 GIL与lock锁的区别 验证计算密集型IO密集型的
效率
多线程实现socket通信 进程池, 线程池...
死锁现象与递归锁 死锁现象 from threading import Thread, Lock import time Lock_A = Lock() Lock_B = Lock() class MyThread(Thread): def run(self): self.f1() self.f2() def f1(self): ...
【
效率
对比】c++多线程同步几种方式的
效率
对比研究: 原子操作,c++锁,自旋锁,windows临界区,windows互斥对象
通过比较以下几种同步方式,测试各方法
效率
,分为以下6种情况做对比: 不加任何同步措施; Windows原子操作; c++11 mutrex; 自定义的自旋锁CLCS; Windows临界区; Windows互斥对象; 硬件平台:AMD 8核16线程,内存16GB 系统/软件平台:windows10,vs2019com(vc++); 方法:定义3个变量,在多线程中自加(16线程x10万次),记录...
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章