Witam, zmagam się z pewnym zagadnieniem, otóż w pewnym wątku chcę zablokować cały obiekt przed dostępem (odczyt, zapis, metoda, właściwość).
Oczywiście kod poniżej to tylko przykład, w rzeczywistości dane do których dostęp chce synchronizować są złożone.
Nie jestem pewien czy użycie lock(…){…} tak jak na przykładzie zadziała, tak jak bym tego chciał, a to chyba wszystko wina dokumentacji,
bo jest tam napisane że ‘lock’ blokuje wykonanie fragmentu kodu zawartego w klamrach. Nie jestem pewien więc pytam
public class AnalogInputClass
{
private object lockObject = new object();
public bool Running = true;
public int Value { get; private set; }
public void ModifyValue(int x)
{
Value = x;
}
// Ta metoda jest wywoływana w osobnym wątku
public void ValueRefresh()
{
while (Running)
{
lock (lockObject)
{
Thread.Sleep(50); // symulacja czasochłonnej operacji pobierania danych
//
Value = 2; // uaktualnia pobrane dane (dla przykładu 2)
}
}
}
}
public class MainClass
{
public static void Main()
{
AnalogInputClass aic = new AnalogInputClass();
Thread thread = new Thread(new ThreadStart(aic.ValueRefresh));
thread.Start();
// Chce miec pewność że ta metoda nie zostanie wywołana w momencie
// gdy obiekt jest modyfikowany wewnątrz ValueRefresh()
aic.ModifyValue(300);
}
}
(tak wiem mogę sobie napisać programik i sprawdzić czy będzie działać tak jak trzeba, ale może na forum (przy okazji) dowiem się czegoś więcej)
Z góry dzięki za zainteresowanie.