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

use*_*413 -1 .net c# multithreading atomicity

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

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

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

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

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

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

Joh*_*ica 6

你想要交换:

int currentCount = System.Threading.Interlocked.Exchange(ref count, 0)
Run Code Online (Sandbox Code Playgroud)

根据文档

将 32 位有符号整数设置为指定值并返回原始值,作为原子操作。