就 cpu 而言,低争用互斥体的成本是多少

How costly is a low contention mutex in terms of cpu

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

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

正如我所期望的,几乎永远不会有任何关于锁的争用,与检查、递增和递减局部变量相比,获取和释放互斥锁的成本要高得多?

我在别处使用互斥锁,所以不使用它不会节省任何内存。

如果同一数据将在另一个线程访问的同时被修改,您只有两个选择:锁定或使用原子数据类型。没有"using local variables to guard it"这样的东西。在您拥有的两个选项中,锁定和原子,它们的大部分运行时成本是与其他内核的内存(缓存)同步,并且它们中的任何一个都应该大致相同。这是一笔不小的成本(最有可能是几十个周期的数量级),但您不能选择退出;没有它就无法获得正确性。