मैं Parallel.ForEach
पैटर्न को लागू करने और प्रगति को ट्रैक करने की कोशिश कर रहा हूं, लेकिन मुझे लॉकिंग के बारे में कुछ याद आ रहा है। निम्न उदाहरण 1000 पर गिना जाता है जब threadCount = 1
, लेकिन जब threadCount
> 1. ऐसा करने का सही तरीका क्या है?उचित समानांतर कैसे करें। रिपोर्टिंग, लॉकिंग और प्रगति रिपोर्टिंग
class Program
{
static void Main()
{
var progress = new Progress();
var ids = Enumerable.Range(1, 10000);
var threadCount = 2;
Parallel.ForEach(ids, new ParallelOptions { MaxDegreeOfParallelism = threadCount }, id => { progress.CurrentCount++; });
Console.WriteLine("Threads: {0}, Count: {1}", threadCount, progress.CurrentCount);
Console.ReadKey();
}
}
internal class Progress
{
private Object _lock = new Object();
private int _currentCount;
public int CurrentCount
{
get
{
lock (_lock)
{
return _currentCount;
}
}
set
{
lock (_lock)
{
_currentCount = value;
}
}
}
}
धन्यवाद, वास्तव में क्या हो रहा है। मैंने लागू लॉकिंग के साथ काउंटर बढ़ाने के लिए प्रगति पर एक अतिरिक्त विधि जोड़ा। –
मुझे लगता है कि परिवर्तनीय प्रगति लॉक "प्रगति" होनी चाहिए? – eschneider