簡體   English   中英

C#如何使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM