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

Use and reset an int that is constantly incremented by another thread

我有一个任务计算它从某个源接收到的数据包的数量。

定时器每 250 毫秒启动一次读取计数并将计数输出给用户。在我需要将计数设置回 0 之后。

我担心的是在读取和显示计数之间,但在我设置 count=0 之前,另一个线程中的计数已经增加,所以我最终通过将其清零而丢失了计数。

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

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

我也在研究 ReaderWriterLockSlim,我需要的是最有效/开销更少的方法来完成,因为有很多数据要处理。

您要兑换:

int currentCount = System.Threading.Interlocked.Exchange(ref count, 0)

根据the docs

Sets a 32-bit signed integer to a specified value and returns the original value, as an atomic operation.