首页
社区
课程
招聘
[讨论]如何手动实现最快的线程同步“原子锁”?
发表于: 2022-7-25 16:35 5848

[讨论]如何手动实现最快的线程同步“原子锁”?

2022-7-25 16:35
5848

①临界区、互斥体这些太慢就别提了, 自旋锁介绍说效率高, 但经过很多人实测, 由于不停请求大量占用CPU,最终甚至比互斥体同步速度还慢
②C++自带原子锁只能用于对基本类型数据的锁.如果你只是想要两个线程的A代码和B代码在各自执行时不被对方打断, 但并不是对基本数据类型的访问, 那自带原子锁没用.

 

问题来了, 自己如何实现最快最接近0延迟的线程同步锁呢?


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (12)
雪    币: 6
活跃值: (3290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看应用场景,如果加锁后要执行大量的操作,那一旦碰撞肯定就效率低。 这时候就得选用临界区或者互斥。 
如果加锁后的操作很少,那自旋锁效率最高。
2022-7-25 17:02
0
雪    币: 3574
活跃值: (4719)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用FiberThread类似的东西 自己控制调度
2022-7-25 17:03
0
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
4
有支持读写分离的资源锁和推锁,而且不存在你说的接近0延迟的同步锁,分应用场景的,要接近0延迟为啥不去玩异步,玩锤子同步
2022-7-25 17:07
0
雪    币: 1825
活跃值: (5354)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
咖啡_741298 看应用场景,如果加锁后要执行大量的操作,那一旦碰撞肯定就效率低。 这时候就得选用临界区或者互斥。 如果加锁后的操作很少,那自旋锁效率最高。
理论上是如此. 但很多人做过测试, 只有“++i”一行代码, 创建2个线程. 按理说这操作够短了, 自旋锁应该比互斥体更快得到锁吧?但是实测速度竟然还不如互斥体, 这当如何解释?帖子https://www.csdn.net/tags/MtTaYgysNDIyNzUtYmxvZwO0O0OO0O0O.html
2022-7-25 20:27
0
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
6
BeholdSnow 理论上是如此. 但很多人做过测试, 只有“++i”一行代码, 创建2个线程. 按理说这操作够短了, 自旋锁应该比互斥体更快得到锁吧?但是实测速度竟然还不如互斥体, 这当如何解释?帖子https://w ...
你用户层没法关中断,自旋锁能体现出来鸡毛的优势。。。
2022-7-25 23:22
0
雪    币: 1825
活跃值: (5354)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
はつゆき 你用户层没法关中断,自旋锁能体现出来鸡毛的优势。。。
自旋锁的效率高响应快是微软说的, 不是我说的. 微软也没说“要求用户关中断”, 而是说直接用它就快.但事实不是.
2022-7-26 06:45
0
雪    币: 6552
活跃值: (4346)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
8

无锁异步

读写分离锁

最后于 2022-7-26 09:53 被yimingqpa编辑 ,原因:
2022-7-26 09:51
0
雪    币: 1825
活跃值: (5354)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
はつゆき 有支持读写分离的资源锁和推锁,而且不存在你说的接近0延迟的同步锁,分应用场景的,要接近0延迟为啥不去玩异步,玩锤子同步
推锁没搜到, 英文是什么. 比互斥体、自旋锁快否?
2022-7-26 11:18
0
雪    币: 1825
活跃值: (5354)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
yimingqpa 无锁异步读写分离锁
无锁异步是用哪个API?速度比互斥体、自旋锁快吗?
2022-7-26 11:19
0
雪    币: 6552
活跃值: (4346)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
11
BeholdSnow 无锁异步是用哪个API?速度比互斥体、自旋锁快吗?
std::async
2022-7-26 11:32
0
雪    币: 33
活跃值: (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
内存屏障
2022-7-26 16:17
0
雪    币: 6
活跃值: (3290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
BeholdSnow 理论上是如此. 但很多人做过测试, 只有“++i”一行代码, 创建2个线程. 按理说这操作够短了, 自旋锁应该比互斥体更快得到锁吧?但是实测速度竟然还不如互斥体, 这当如何解释?帖子https://w ...
那个测试代码有问题,就是死循环执行,这样就是100%碰撞,cpu全部被占满。 这种情况下就得考虑硬件调度机制了,如果每条测试代码都加1毫秒延时,这样更具实际意义,这样肯定是自旋锁优势
2022-7-26 17:41
0
游客
登录 | 注册 方可回帖
返回
//