在cpu方面,低争用互斥锁的成本是多少

时间:2016-07-08 02:33:26

标签: c linux multithreading mutex

我有一些C代码(在Linux上)需要以线程安全的方式运行。这是非常低的争用,但我必须保护它以确保正确性。

我可以选择使用局部变量来保护它(它将根据代码的编写方式工作)但是因为我有一个互斥变量,这在cpu使用方面是更好的方法吗?

正如我所期望的那样,锁定几乎永远不会对检查,递增和递减局部变量相比,获取和释放互斥锁的成本要高得多吗?

我在其他地方使用互斥锁,所以不使用它我没有保存任何内存。

1 个答案:

答案 0 :(得分:4)

如果在从另一个线程访问的同时修改相同的数据,则只有两个选项:锁定或使用原子数据类型。没有"使用局部变量来保护它"。在你拥有的两个选项中,锁定和原子,其运行时成本的大部分是与其他内核的内存(缓存)同步,并且它们中的任何一个都应该大致相同。这是一个非常重要的成本(最有可能是几十个周期),但它不是一个你可以选择退出的成本;没有它,没有办法获得正确性。