colobot-data/help/cbot/R/synchro.txt

26 lines
2.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

\b;Инструкция \c;synchronized\n; (для специалистов)
Метод \l;класса\u cbot\class; может быть объявлен с помощью \c;synchronized\n;. Данный метод помогает убедиться в том, что какая-либо функция никогда не выполняется более чем одним ботом.
Проиллюстрируем проблему:
\c;
\s;class blocking
\s;{
\s; static int nb = 33;
\s; synchronized int inc( )
\s; {
\s; int val = nb;
\s; wait ( 2 ); // ждать 2 секунды.
\s; nb = nb + 1;
\s; return val;
\s; }
\s;}
\n;
Что произойдет. если два боту будут выполнять метод \c;inc\n; в одно время¦?
Оба она будут выполнять \c;val=nb\n; и ждать две секунды, так что один из них будет иметь \c;val=33\n;. С помощью \c;synchronized\n; первый бот начнет выполнение с \c;val=33\n; и подождет 2 секунды, а затем вернет значение. Только после того, как первый бот вернет значение из метода \c;inc\n;, второй бот начнет выполнять метод \c;inc\n; и, следовательно, второй бот будет всегда иметь \c;val=34\n;.
Вы можете иметь больше синхронизаций \l;классов\u cbot\class; для того, чтобы предотвратить выполнение одного метода более чем одним ботом. Другими словами: до тех пор, пока один бот не закончит работу, другие боты не смогут выполнить этот класс.
\t;См. также
\c;\l;class\u cbot\class;\n;, \c;\l;static\u cbot\static;\n;
\l;Программирование\u cbot;, \l;типы\u cbot\type; и \l;категории\u cbot\category;.