2016-07-08 52 views
0

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

我有选择使用局部变量来防止它(这将工作基于如何编写代码),但由于我有一个互斥变量,这是更好的方法在cpu使用方面?

正如我所期望的,在检查,递增和递减局部变量时,几乎没有任何争夺锁的获取和释放互斥的成本更高?

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

+1

什么平台?例如,在通过futex实现互斥体的Linux上,如果互斥体没有被竞争,就没有上下文切换 –

+0

平台是linux –

+3

“我可以选择使用局部变量来防止它(这将根据代码的写法)“ - 这听起来极不可能。 – user2357112

回答

4

如果相同的数据将被修改为与来自另一个线程的访问同时发生,那么您只有两个选项:锁定或使用原子数据类型。没有“使用局部变量来防止它”这样的事情。在你拥有的两个选项中,锁定和原子,其运行成本的大部分是与其他内核的内存(高速缓存)同步,并且它们中的任何一个都应该大致相同。这是一项不重要的成本(最可能是几十个周期),但并不是你可以选择退出的一个;没有它,没有办法获得正确性。