Vor kurzem habe ich diesen Code in einer Webseite zu sehen ist, und meine Frage ist folgende:Eine einzelne Bool-Variable beim Multithreading sperren?
private bool mbTestFinished = false;
private bool IsFinished()
{
lock(mLock)
{
return mbTestFinished;
}
}
internal void SetFinished()
{
lock(mLock)
{
mbTestFinished = true;
}
}
In einer Multi-Thread-Umgebung ist wirklich notwendig, den Zugang zum mbTestFinished
zu sperren?
Es ist der am besten beweisbare Mechanismus, um sicherzustellen, dass es kein CPU-Cache-Read (was nicht gut zwischen Threads funktionieren würde) - "volatile" würde auch funktionieren, aber aus Gründen, die zu komplex sind (das ist nicht die * Absicht * von 'volatile', aber eher: ein Nebeneffekt) –
@MarcGravell Ich habe immer gedacht, dass _was_ die Absicht von' volatile' war; jede Chance, dass Sie einen guten Link fallen lassen, der erklärt, was ist? –
@romkyns: Diese [Antwort] (http://stackoverflow.com/a/4103879/158779) bietet einige Einblicke. –