使用并重置一个不断增加的int值,其他线程
问题描述:
我得到一个Task来统计它从某个源接收到的数据包的数量。使用并重置一个不断增加的int值,其他线程
每250ms一个定时器启动读取并输出计数给用户。在我需要将计数设置为0之后。
我的问题是,在读取和显示计数之间,但是在我设置count = 0之后,count在另一个线程中增加了,所以我最终失去了计数将它归零。
我是新来的线程,所以我一直在多个选项。
我看着使用互锁,但据我所知它只给我算术运算,我没有选择实际设置变量值。
我还在研究ReaderWriterLockSlim,我需要的是最高效/较少的开销方式来完成,因为有大量数据传入。
答
您希望Exchange:
int currentCount = System.Threading.Interlocked.Exchange(ref count, 0)
按照MSDN:“设置一个[32位有符号整数]到指定的值,并返回原来的价值,作为一个原子操作”
https://msdn.microsoft.com/en-us/library/d3fxt78a(v=vs.110).aspx
使用Interlocked.Exchange抓住当前值,并在同一时间将其重置为0,Interlocked.Increase予以增加。 –
@ LasseV.Karlsen Interlocked.Increment * – john
是的,对不起,在我的iPad上只能记忆打字。不幸的是没有intellisense :) –