Mam metodę, która może być wywołana z wielu wątków, ale chcę tylko, aby pierwszy wątek zrobił jakąś logikę wewnątrz metody. Tak więc planuję użyć zmiennej boolean. Pierwszy wątek, który wchodzi, ustawi zmienną boolowską na false (aby zapobiec przedostaniu się kolejnych wątków) i wykona logikę metody.jak zablokować zawartość metody
Kolejne wątki, które przychodzą do tej metody, sprawdzi zmienną boolean. Ponieważ została ustawiona na wartość false przez pierwszy wątek, pominą one logikę metody.
W kodzie, coś takiego:
private void myMethod()
{
if (firsTime) //set to true in the constructor
{
firstTime = false; //To prevent other thread to come inside here.
//method logic
}
}
chcę użyć blokady, aby wykonać to, ale nie wiem, gdzie go umieścić.
Jeśli zablokuję wewnątrz "if", aby zmienić firstTime na false, jego możliwe 2 lub więcej wątków już wchodzą do wnętrza if (nie chcę tego).
Jeśli zablokować poza "if", aby zmienić firstTime na false, w jaki sposób pierwszy wątek może wejść do wewnątrz, jeśli wykonać logikę metody, jeśli firstTime jest już ustawione na false?
Moje pytanie brzmi: jak wykonać blokadę, aby uzyskać pożądaną funkcjonalność? (Pierwszy wątek, który przychodzi, ustawia logikę metody boolean i execute).
Nie mogę zablokować całej logiki metody, ponieważ będzie to bardzo czasochłonne operacje.
chciałbym po prostu zadzwoń logikę metoda w ctor, ale może to tylko ja :) –