C ++ 标头在执行并发时是否使用硬件支持,或者纯粹是基于算法的解决方案

问题描述 投票:0回答:3

如何在后台实现C ++互斥锁?它是仅使用Decker,Peterson或其他算法来实施互斥,还是使用硬件支持,例如中断广告比较和交换(CAS)。

是否有可能在没有任何硬件支持的情况下实现由互斥量和条件变量组成的整个多线程库?

c++ multithreading concurrency mutex
3个回答
2
投票
在Linux上可能会使用pthreads(How does pthread implemented in linux kernel 3.2?)。

在Windows上使用Windows API。您可以尝试询问Microsoft。

标准库实现不会直接进行硬件访问。这就是操作系统的用途。


1
投票
不可能仅使用原子读写来使多个线程就共享变量的值达成共识,而需要进行比较和交换。

0
投票
请注意,诸如Decker,Peterson或其他算法的任何算法至少都需要原子加载和原子存储,如果加载和存储不是原子的,则它们将不起作用。非原子类型也不强制执行内存排序,这是这些算法所隐含的。

并没有真正要求std::mutex将基于操作系统调用,并且根本没有操作系统调用。

理论上,std::mutex只能旋转互斥量。

它也可能仅阻止互斥。

实际上,一个好的实现首先会尝试使用atomic处理阻塞,但是当采取等待措施时,它将进行OS等待。

© www.soinside.com 2019 - 2024. All rights reserved.