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

26 lines
2.0 KiB
Plaintext
Raw Normal View History

\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;.