3

我不是在询问使用后台工作者或线程池或 TPL 的最惯用的方式。

我试图找出使用 .NET 将数据从一个线程传递到另一个线程时最快的方法

我目前正在玩一个带有写索引和读索引的环形缓冲区。这样,除了更新读/写索引的原子操作外,我根本没有任何线程同步。(我不是 100% 确定,但是整数的读取和 ++ 在 .NET 中是原子的,对吗?或者当一个线程读取整数时,整数是否可以在中途被覆盖?)

                         Write Index
                              V
index 0 [_][_][_][_][_][_][_][_][_][_][_] --> higher index
               ^
           Read Index

当涉及到线程间通信时,这是一种合理的方法吗?

我没有将它用于任何真正的项目,我只是想更好地掌握什么有效,什么无效。

[编辑] 好的,我准备公开羞辱:

https://gist.github.com/rogeralsing/8121376

该代码中有多少个漏洞?

4

1 回答 1

2

我认为这取决于您如何定义“最快”和“线程之间”。我认为这ConcurrentBag<T>是一个非常好的方式。如果我没记错的话,该实现使用某种链表来减少大多数锁的范围,因此它变得更具可扩展性。2个简单线程之间是否很快?您需要检查,但它利用了您的内核,因此您的应用程序作为一个整体将运行得很快。

于 2013-12-24T21:01:58.670 回答