colobot-data/help/P/cbot/synchro.txt.bak

26 lines
1.4 KiB
Plaintext

\b;Instrukcja \c;synchronized\n; (dla specjalistów)
Metoda \l;klasy\u cbot\class; może być zadeklarowana jako \c;synchronized\n;. Dzięki temu można zapewnić, że metoda będzie uruchamiana nie więcej niż przez jednego robota w tym samym czasie.
Następujący przykład pomoże zilustrować problem:
\c;
\s;class blokowanie
\s;{
\s; static int nb = 33;
\s; synchronized int inc( )
\s; {
\s; int val = nb;
\s; wait ( 2 ); // czekaj 2 sekundy
\s; nb = nb + 1;
\s; return val;
\s; }
\s;}
\n;
Co się dzieje, gdy dwa roboty wykonają metodę \c;inc\n; w tym samym czasie¦?
Oba wykonają polecenie \c;val=nb\n; i poczekają 2 sekundy, a więc oba otrzymają \c;val=33\n;. Gdy użyjemy instrukcji \c;synchronized\n; pierwszy robot rozpocznie wykonywanie z \c;val=33\n; poczeka 2 sekundy i wyjdzie z metody. Dopiero po zakończeniu wykonywania metody \c;inc\n; przez pierwszego robota, drugi robot będzie miał możliwość wykonania metody \c;inc\n;, wobec czego otrzyma on zawsze \c;val=34\n;.
Można mieć więcej niż jedną zsynchronizowaną metodę w \l;klasie\u cbot\class; w celu zapobieżenia równoczesnemu wykonywaniu więcej niż jednej metody. Innymi słowy: tak długo, jak długo robot jest wewnątrz zsynchronizowanej metody, żaden inny robot nie może wykonywać żadnej zsynchronizowanej metody tej samej klasy.
\t;Zobacz również
\c;\l;klasa\u cbot\class;\n;, \c;\l;static\u cbot\static;\n;
\l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.