我有一个Task,它计算从某个源接收的数据包数量。
计时器每隔250ms读取一次并向用户输出计数。在我需要将计数设置回0之后。
我担心的是在读取和显示计数之间,但是在我设置count = 0之前,count在另一个线程中递增,所以我最终通过将其归零来减少计数。
我是Threading的新手,所以我有多种选择。
我研究过使用Interlocked,但据我所知它只给我算术运算,我没有选择将变量实际设置为值。
我也在调查ReaderWriterLockSlim,我需要的是最有效/更少开销的方法,因为有大量数据可供使用。
答案 0 :(得分:2)
你想要Exchange:
int currentCount = System.Threading.Interlocked.Exchange(ref count, 0)
根据MSDN:“将[32位有符号整数]设置为指定值,并返回原始值作为原子操作。”
https://msdn.microsoft.com/en-us/library/d3fxt78a(v=vs.110).aspx