Перейти к содержимому

Фотография

Как работает блок critical?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 Ul_Svetlana

Ul_Svetlana

    Новый участник

  • Members
  • Pip
  • 22 сообщений
  • ФИО:Лебедева Светлана Сергеевна

Отправлено 13 декабря 2007 - 07:10

Добрый день,
В руководстве по силктесту есть упоминание про конструкцию critical. Как я поняла, если есть несколько потоков spawn и управляющий поток critical, то как только critical заканчивается, то прерываются и все остальные. Так ли это на самом деле? Если можно, приведите простенький пример, как это работает. Большое спасибо.
  • 0

#2 Dmitry_NS

Dmitry_NS

    Активный участник

  • Members
  • PipPip
  • 134 сообщений
  • ФИО:Дима
  • Город:Елизово

Отправлено 13 декабря 2007 - 08:39

Добрый день,
В руководстве по силктесту есть упоминание про конструкцию critical. Как я поняла, если есть несколько потоков spawn и управляющий поток critical, то как только critical заканчивается, то прерываются и все остальные. Так ли это на самом деле? Если можно, приведите простенький пример, как это работает. Большое спасибо.

Не совсем так. Этот блок является таким же spawn блоком, что и остальные и если вдруг он прервал выполнение, то прерываются остальные потоки, запущенные в параллели с данным. То есть это не управляющий блок, а скорее блок повышенного контроля и особой важности, без выполнения которого остальные блоки не могут или не должны выполняться
  • 0
Основной принцип моего существования — служение гуманистическим идеалам человечества.

#3 vass

vass

    Опытный участник

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

Отправлено 13 декабря 2007 - 12:02

народ! :acute: нельзя же просто так читать - нужно когда-то и пробовать! :good:
вкратце - critical секция - это поток, который будет исполняться монопольно. Во время его работы все остальные потоки заморозятся.
кстати - главный код (тот, котрый вне пределов spawn) это тоже поток, почти такой же, как и остальные :clapping:
И насчет эксепшенов в потоках - при распространении эксепшена за пределы блока spawn (т.е. не перехваченный raise/reraise) - убивается данный поток и все остальные вместе с ним.
[-] main ()
		[ ] int i
		[-] spawn
			[-] for i = 1 to 10
				[ ] Print (i,TimeStr())
		[-] spawn
			[ ] Print ("B",TimeStr())
			[ ] Sleep (2)
			[ ] Print ("B",TimeStr())
		[ ] rendezvous
		[ ] Print ("C",TimeStr())
инструкция к коду: 1-запустить в этом виде. 2-поменять второй спавн на критикал и запустить. 3-убрать рандеву (rendezvous) и попробовать без него ;)
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных