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

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

2022-7-25 16:35
3298

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

 

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


看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

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

无锁异步

读写分离锁

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