C# Language
Att göra en variabel tråd säker
Sök…
Kontrollera åtkomst till en variabel i en Parallel.For-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 );
}
}
Det räcker inte att bara göra sum = sum + i
utan låset eftersom läs-modifiera-skrivningen inte är atomisk. En tråd kommer att skriva över alla externa modifieringar till sum
som inträffar efter att den har läst det aktuella värdet på sum
, men innan den lagrar det modifierade värdet för sum + i
tillbaka till sum
.
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow