Ostatnio widziałem tego kodu na stronie internetowej, i moje pytanie jest następujące:Blokowanie pojedynczej zmiennej binarnej podczas wielowątkowości?
private bool mbTestFinished = false;
private bool IsFinished()
{
lock(mLock)
{
return mbTestFinished;
}
}
internal void SetFinished()
{
lock(mLock)
{
mbTestFinished = true;
}
}
W środowisku wielowątkowym, jest to naprawdę konieczne, aby zablokować dostęp do mbTestFinished
?
Jest to najbardziej sprawdzalny mechanizm zapewniający, że nie jest to odczyt w pamięci podręcznej CPU (który nie działałby dobrze między wątkami) - 'volatile' też by działało, ale z powodów zbyt skomplikowanych (to nie jest * zamiar * "lotnego", ale raczej: efekt uboczny) –
@MarcGravell Zawsze myślałem, że jest intencją 'volatile'; Czy przypadkiem nie zrzucisz dobrego linku, który wyjaśnia, co to jest? –
@romkyns: Ta [odpowiedź] (http://stackoverflow.com/a/4103879/158779) zapewnia pewien wgląd. –