Controlling access to a variable in a Parallel.For C# with Example



Controlling access to a variable in a Parallel.For C# with Example

loop 
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 ); 
} 
} 
It is not sufficient to just do sum = sum + i without the lock because the read-modify-write operation is not atomic. 
A thread will overwrite any external modifications to sum that occur after it has read the current value of sum, but 
before it stores the modified value of sum + i back into sum. 
 

0 Comment's

Comment Form

Submit Comment