最佳实践:在线程之间进行同步

sta*_*tor 0 c++ multithreading

是否几乎总是需要在有跨线程数据访问时进行线程同步(即使用互斥,信号量,关键部分等),即使在进行需求分析后不需要它?

Mic*_*ael 5

我总是建议使用最简单,最简单的同步方案,直到分析显示你应该这样做 - 这通常意味着几个大锁与许多细粒度锁或无锁.

问题是确定无锁代码是否正确比确定带锁的相应代码是否正确要困难得多.这会给代码的维护者带来很大的负担,并且很有可能他们会错误地引入错误.即使您知道锁定对于当前使用代码的方式是安全的,但未来可能会由那些不了解的人改变.

其次,在许多情况下,带锁和无锁代码的代码之间的性能差异是微不足道的 - 直到你知道锁争用存在问题,你不应该考虑无锁.即使存在争用问题,无锁也不一定是最佳解决方案.