[英]How can I use an array item with Interlocked.CompareExchange
[英]C# How to use Interlocked.CompareExchange
我的目標是:
有一定范圍的整數,我必須測試該范圍內的每個整數是否具有隨機性。 我想為此使用多個線程,並使用共享計數器在線程之間平均分配工作。 我將計數器設置為起始值,然后讓每個線程取一個數字,將其增加,進行一些計算,然后返回結果。 此共享計數器必須使用鎖來遞增,因為否則將在整數整數范圍內進行測試以檢測間隔/重疊。
我不知道從哪里開始。 假設我要12個線程來完成工作,我這樣做:
for (int t = 0; t < threads; t++)
{
Thread thr = new Thread(new ThreadStart(startThread));
}
startThread()
是我用於計算的方法。
您能幫我嗎? 我知道我必須使用Interlocked類,僅此而已。
假設您在某處有一個int
字段(最初初始化為-1
),然后:
int newVal = Interlocked.Increment(ref theField);
是線程安全的增量; 假設您不介意(整數)上限溢出的風險,那么:
int next;
while((next = Interlocked.Increment(ref theField)) <= upperInclusive) {
// do item with index "next"
}
但是, Parallel.For
將更方便地完成所有這些操作:
Parallel.For(lowerInclusive, upperExclusive, i => DoWork(i));
或(限制為12個線程):
var options = new ParallelOptions { MaxDegreeOfParallelism = 12 };
Parallel.For(lowerInclusive, upperExclusive, options, i => DoWork(i));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.