假设我共享double
变量。线程A
每秒更新数千次。在另一个线程B
我想每次发生这种情况时都会收到有关“更新”的通知。无锁技术通过从一个线程到另一个线程的双重更新
我想完全避免的通知,只是使用while(true)
循环,但这种引进显著放缓到我的程序lock-free calc: how to sum N double numbers that are changing by other threads?的可能,因为“同时你继续加载,从内存一遍又一遍这同一阵列是不是表现确实不错因为内存带宽有限。“
我也试过使用Monitor
类,但它也很慢,我已经看到长达1-2毫秒的延迟,当Monitor.TryEnter
返回false
。
我现在认为我需要使用无锁技术进行通知,可能使用SpinLock
或其他东西?
之间,通知我喜欢,但问题是AutoResetEvent'多少开销'介绍。 – javapowered 2012-07-09 13:31:57
我没有测试这个。您可以测试1000个迭代的代码块并检查执行这些迭代所需的时间,然后使用锁检查相同的迭代。那么你可以知道结果。 – Waqar 2012-07-09 14:37:38