读写自旋锁 linux,boost是否像Linux一样提供读写自旋锁机制?

用户态spinlock在多核环境中的应用有限,主要因为它依赖于线程在不同CPU上运行且需要避免中断。在内核中,spinlock仅用于特定的多核同步,而在用户空间,由于线程可能在同一核上,使用spinlock可能导致性能下降,甚至比mutex更慢。mutex通常在调度器管理下提供更好的同步效果,特别是在涉及I/O操作时。因此,对于大多数用户空间同步需求,mutex是更好的选择。
摘要由CSDN通过智能技术生成

用户态 spinlock 这个东西,其实没多大用。(其实在内核态用的地方也很少,基本上依赖 scheduler 的代码都不能用。)

如果你看过 Linux kernel 代码,你会知道在 disable SMP 的时候,spinlock 是一个空函数。在 Linux kernel 里,spinlock 仅仅是一个在多核之间做同步的机制。这个机制用在普通的线程模型上意义不大。

为什么说意义不大呢?你看用 spinlock 的初衷是什么?是为了让 waiting thread 不被挂起,不用产生进程 suspend-reschedule 的开销。但是你要让 waiting thread 等待的尽量短,还要有一个要求,就是 lock-owning thread 得赶紧把事情干完。那你怎么保证 lock-owning thread 赶紧完事呢?你得保证 waiting thread 和 lock-owner 运行在不同 CPU 上,而且 lock-owner 最好能 disable interrupt 防止自己被 preemptively suspend。否则的话,不光还要有 thread switch,而且 lock-owner 还可能去空等待 waiting thread,因为后者在 busy-waiting 而并非挂起。所以你看,这个条件只有在 kernel 里操作多核的特殊代码才能满足。在用户空间的线程是不知道自己是不是运行在同一个核上的。

所以说 spinlock 在用户空间有可能反而比 mutex 要慢。这个东西实在是鸡肋。只要你已经把自己的代码托付给了 scheduler,mutex 是目前最好的同步模型。(当然 atomic 和 memory barrier 也是,但是它们都不能构建任意长的 critical region。)而且 disk I/O 本来就会 voluntarily relinquish CPU。这种 lock-owner 为什么还要用 spin lock 我就看不懂了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值