Cтраница 2
Обратите внимание, что при многократном щелчке на кнопке Current Form Object вы получаете все больше текста, и текст поля MEMO включается в поток. Через несколько раз выполнение всей операции становится чрезвычайно медленным, вплоть до того, что создается впечатление зависания программы. В этом фрагменте видна гибкость использования потоков - можно написать общую процедуру, которую затем использовать для конвертирования любого потока. [16]
Присваивая указателю нулевое значение, например следующим выражением: rayPtr 0, вы тем самым превращаете блуждающий указатель в нулевой. Еще одна опасность блуждающих указателей состоит в том, что, дважды применив к одному и тому же указателю оператор delete, вы тем самым создадите неопределенную ситуацию, которая может привести к зависанию программы. Этого не случится, если освобожденному указателю будет присвоено нулевое значение, Присвоение освобожденному указателю - как блуждающему, так и нулевому - нового значения ( т.е. использование выражения myPtr 5) недопустимо, но если в случае с пустым указателем об этом вам сообщит компилятор, то в случае с блуждающим указателем вы узнаете об этом по зависанию программы в самый неподходящий момент. [17]
Присваивая указателю нулевое значение, например следующим выражением: rayPtr 0, вы тем самым превращаете блуждающий указатель в нулевой. Еще одна опасность блуждающих указателей состоит в том, что, дважды применив к одному и тому же указателю оператор delete, вы тем самым создадите неопределенную ситуацию, которая может привести к зависанию программы. Этого не случится, если освобожденному указателю будет присвоено нулевое значение, Присвоение освобожденному указателю - как блуждающему, так и нулевому - нового значения ( т.е. использование выражения myPtr 5) недопустимо, но если в случае с пустым указателем об этом вам сообщит компилятор, то в случае с блуждающим указателем вы узнаете об этом по зависанию программы в самый неподходящий момент. [18]
G ( см. § 2.3) соответствует модели распределенных вычислений, в которой процессы взаимодействуют посредством асинхронного обмена сообщениями через буферы. Как уже говорилось, процессы могут иметь как входные, так и выходные либо только входные буферы. Семантически обе модели эквивалентны. Проблема блокировки, или реализуемости потоковых моделей, заключается в таком согласовании параметров буферов ( очередей сообщений), чтобы учесть все допустимые истории процессов программы, когда ни один из них не блокируется из-за отсутствия входных сообщений. Исследование реализуемости вычислений может быть сведено к процедуре разметки М - сети. Напомним, маркировка входных и выходных позиций вершин М - сети соответствует ширине буфера ( см. рис. 2.6 и рис. 2.7), а метки дуг позволяют получить число сообщений ( или глубину буфера), гарантирующее отсутствие зависаний программы при любых допустимых историях процессов. [19]