Czy w przypadku jednej zmiennej wykorzystywanej przez
dwa wątki wymagana jest specjalna ochrona dostępu do
jej zawartości ?
Założenia :
1.Dwa wątki główny i dodatkowy
2.Oba posiadją jednakowy priorytet wykonania.
3.Wątek główny ma za zadanie zamknięcie wątku dodatkowego poprzez "wspólną zminna globalną".
4.Sytuacja jest nieco uproszczona ,wątek główny może uruchomić wątek dodatkowy po jego
zakończeniu ,przed ponownym utworzeniem wątku ma wyłączny dostęp do zmiennej tak że można
to pominąc .[czyli głównie chodzi o zamknięcie wątku dodatkowego ]
Przyklad pseudo kod:
bool zmienna = true ; // globalna np.
void wątek_dodatkowy()
{
while(zmienna)
{
działa,,,
}
}
.....
.....
// wątek główny
zmienna = false // kończymy wątek dodatkowy
.....
......
Pytanie :
O ile przy ochronie kilku zmiennych których stan jest krytyczny
sytuacja jest jasna bo wiadomo że należy zablokować dostęp
innego wątku aby nie modyfikował zmiennych których wartość musi
być kontrolowana dokładnie przez jeden wątek jeśli dostęp zostanie
uzyskany do jednej zmiennej powiązanej logicznie z innymi.
W przypadku jednej zminnej zakładając że kolejność odczytania
jej wartości przez wątki nie jest krytyczna czy istnieje potrzeba
jej ochrony np. użycia specjalnych fun api używanych np.
w tzw. blokadzie wirowej aby uniknąć zakleszczenia Aplikacji ?
Czy taką zmienną należy zmieniać w sposób "atomowy" czy można
sobie dać z tym spokój,,,,
Event. czy przeniesienie kodu bez ochrony zmiennej na maszynę
wieloprocesorową nie spowoduje załamania aplikacji bez
stosowania ochrony dostępu ?
Jako że system traktuje wątki i procesy w sposób "wirtualny" mam
wątpliwości czy proba dostępu do jednej zmiennej w jednym
procesie ale przez dwa wątki wymaga specjalnego traktowania
czy można przyjąć że wszystko dzieje się szeregowo i nie nastąpi
żaden konflikt ,,,