Я не спрашиваю о самом идиоматичном способе использования фоновых рабочих процессов, пула потоков или TPL.
Я пытаюсь выяснить, какие подходы являются самыми быстрыми, когда речь идет о передаче данных из одного потока в другой с использованием .NET.
В настоящее время я играю с кольцевым буфером с индексом записи и индексом чтения. Таким образом, у меня вообще нет синхронизации потоков, кроме атомарных операций по обновлению индекса чтения/записи. (Я не уверен на 100%, но чтение и ++ для целых чисел являются атомарными в .NET, верно? Или целое число может быть перезаписано наполовину, когда его читает один поток?)
Write Index
V
index 0 [_][_][_][_][_][_][_][_][_][_][_] --> higher index
^
Read Index
Является ли это разумным подходом, когда дело доходит до взаимодействия между потоками?
Я не использую его для какого-либо реального проекта, я просто хочу лучше понять, что здесь работает, а что нет.
[edit] Хорошо, я готов к публичному позору:
https://gist.github.com/rogeralsing/8121376
Сколько дыр в этом коде?
Interlocked.Increment
, хотя... - person i3arnon   schedule 25.12.2013