使用并重置一个由另一个线程不断增加的int

时间:2017-02-28 07:02:41

标签: c# .net multithreading atomicity udpclient

我有一个Task,它计算从某个源接收的数据包数量。

计时器每隔250ms读取一次并向用户输出计数。在我需要将计数设置回0之后。

我担心的是在读取和显示计数之间,但是在我设置count = 0之前,count在另一个线程中递增,所以我最终通过将其归零来减少计数。

我是Threading的新手,所以我有多种选择。

我研究过使用Interlocked,但据我所知它只给我算术运算,我没有选择将变量实际设置为值。

我也在调查ReaderWriterLockSlim,我需要的是最有效/更少开销的方法,因为有大量数据可供使用。

1 个答案:

答案 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