在我的一个c代码文件中,需要通过该文件中的几乎每个过程进行更新的全局变量之一,每次和每个地方都使用互斥锁进行锁定和解锁。
据我所知,使用mutex的锁定和解锁过多的同步肯定会降低性能。
所以,我的疑问是我如何获得性能水平或如何减少互斥量的使用?
我希望我的问题很明确,否则请告诉我。我会更加清楚。
答案 0 :(得分:4)
如果使用Windows,并且仅在应用程序中需要同步,请改用CriticalSection。这比Mutex要快得多。
答案 1 :(得分:3)
您可以使用message-passing concurrency通过消除代码正文中的共享状态来抽象掉互斥锁。
答案 2 :(得分:1)
您是否已经分析了代码,以确定锁定和解锁互斥锁花费了太多时间?在你拥有之前不要试图优化。没有硬数据的优化通常会浪费精力。
假设:
您可以查看特定于操作系统的功能,例如原子增量和减少而不使用互斥锁。这些不是可移植的C,但您可以使用定义来定位特定的操作系统功能(Interlocked*
用于Windows,而GCC __sync_*
调用是我首先查看的位置。
答案 3 :(得分:0)
您可以将互斥操作分解为单独的函数以使代码更清晰。但是你无法节省操作本身 - 你需要并且确实使用同步,或者你不需要也不要使用它。
答案 4 :(得分:0)
如果您的应用程序可以重构,只使用一个线程,则不再需要互斥锁。
答案 5 :(得分:0)
使用不可变版本替换线程之间共享的一些可变数据结构。不可变数据结构始终是线程安全的。 (你改变它是一个新的副本。)这基本上是为了简化代码的速度。