当我练习基于锁的和无锁的并发时,我意识到我的基于锁的函数比没有同步的函数花费的时间更少:
// A simple money transfer function
void transfer(unsigned int from, unsigned int to, unsigned int amount)
{
lock_guard<mutex> lock(m); // removing this line makes it run slower!
accounts[from] -= amount;
accounts[to] += amount;
}
以下是完整代码的coliru链接。可能是什么原因?
注意:我知道数据争用问题!
更新:我的观察结果仅基于Coliru。因此,我在MacBook Pro(Retina,2012年中)2,6 GHz Intel Core i7 16 GB 1600 MHz DDR3上运行相同的代码,并意识到无锁定运行速度比基于锁定的运行速度快两倍。但基于锁定的那个在Coliru上运行得更快一点。