假设我有两个主题A和B.我从Thread B
创建Thread A
来访问一个函数。
Thread A
大部分时间使用该函数,Thread B
很少在某个命令上使用它。
如果我通过将函数放在临界区附近来使函数成为线程安全的,那么即使Thread A
不存在,它也不会使每次Thread B
处理缓慢?或者我应该在Thread B
中自己做Thread A
而不是创建它?
答案 0 :(得分:3)
PROFILE FIRST。 互操作的重量不会很大的好处 - 你可以每秒锁定和解锁数百万次。代码正确 - 使用任何锁定机制最不容易出现目标系统上的错误或失败 - 然后,只有,如果您认为需要提高性能,请考虑其他策略。
如果您期望资源(即函数)的争用非常低,那么全开互斥锁类型可能会浪费,并且根据资源的特定使用模式,自旋锁可能是一种可行的替代方案。
答案 1 :(得分:1)
关键部分的实际性能含义是您必须自己衡量的。如果代码相对于输入关键部分的次数有很多工作,那么它很可能不会对你造成太大的伤害。如果你在关键部分几乎没有工作(例如,只是递增一个数字),那么你可能会看到性能损失。我建议只使用关键部分尝试多线程方法,看看会发生什么。如果性能足够好,那么您不必担心。如果它最终太慢,那么你需要一些数字来备份你为什么要让线程A进行处理。