using System.Threading.Tasks;
const int _Total = 1000000;
[ThreadStatic]
static long count = 0;
static void Main(string[] args)
{
Parallel.For(0, _Total, (i) =>
{
count++;
});
Console.WriteLine(count);
}
I get different result every time, can anybody help me and tell me why?
Most likely your “count” variable isn’t atomic in any form, so you are getting concurrent modifications that aren’t synchronized. Thus, the following sequence of events is possible:
Thus, the “for” loop has done 2 iterations, but the value has only increased by 1. As thread ordering is “random”, so will be the result.
Things can get a lot worse, of course:
In that case, all those 100 increases done by thread 2 are undone. Although that can really only happen if the “++” is actually split into at least 2 machine instructions, so it can be interrupted in the middle of the operation. In the one-instruction case, you’re only dealing with interleaved hardware threads.