खोज…


Parallel.For लूप में एक वैरिएबल तक पहुंच को नियंत्रित करना

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static void Main( string[] args )
    {
        object sync = new object();
        int sum = 0;
        Parallel.For( 1, 1000, ( i ) => {
            lock( sync ) sum = sum + i; // lock is necessary

            // As a practical matter, ensure this `parallel for` executes
            // on multiple threads by simulating a lengthy operation.
            Thread.Sleep( 1 );
        } );
        Console.WriteLine( "Correct answer should be 499500.  sum is: {0}", sum );
    }
}

केवल लॉक के बिना sum = sum + i करने के लिए पर्याप्त नहीं है क्योंकि रीड-संशोधित-राइट ऑपरेशन परमाणु नहीं है। एक धागा करने के लिए किसी भी बाहरी संशोधनों के ऊपर लिख देगा sum उसके बाद यह के वर्तमान मूल्य पढ़ा है घटित sum है, लेकिन इससे पहले कि यह के संशोधित मूल्य संग्रहीत करता है sum + i में वापस sum



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow