Василиса yaviks - Intelligent Търсене 1 Двигател
Компютърна програма като цяло или неговата отделна процедура, наречена входящ (от английски обратния вход -. Риентри), ако тя е проектирана по такъв начин, че едно и също копие на инструкциите на програмата в паметта може да се споделя от няколко потребители или процеси. В този случай, вторият потребител може да предизвика входящ код, преди да го финализира първия потребител, и то най-малко не трябва да води до грешки, и няма нищо общо с правилното прилагане на изчислението на спусъка на загуба (т.е. не е необходимо за изпълнение на вече направените код откъси) ,
Риентри функции са тясно свързани със сигурността в многонишкова среда (нишка безопасност), обаче, са различни понятия (в практически програмиране под съвременни операционни системи, терминът "обратния вход" в действителност, е еквивалентен на термина «нишка безопасно»). Осигуряване reentrancy е от ключово значение за програмиране многозадачност системи, по-специално операционни системи.
За да се гарантира повторното участника трябва да бъдат изпълнени няколко условия:
- никоя част от кода на разговори не трябва да бъде променен;
- на наречената процедура не запазва информация между извиквания;
- ако процедурата се променя всички данни, те трябва да са уникални за всеки потребител;
- процедура не трябва да се върне указатели към обекти, общи за различните потребители.
Като цяло, това е необходимо да се осигури повторно участник в процеса на разговори или функция се прехвърля всеки път, когато процесът на наричайки всички необходими данни. По този начин, функция, която зависи само от параметрите му, не използвайте глобалните и статични променливи и причинява само функция входящ е входящ. Ако една функция използва глобални или статични променливи, трябва да се гарантира, че всеки потребител запази локално копие на тези променливи.
Следният код фрагмент функция F () и д () не са входящ.
Тук е () зависи от глобалната променлива g_var. обаче, ако два процеса причинят е () в същото време, резултатът е непредсказуем. Следователно, е () не е входящ. Но г () не е входящ, защото използва не-входящ функция е ().
Следващият фрагмент от код функция accum () също не е входящ.
Тук accum - натрупване на функция и стойност. който е отговорен за статичната променлива. Ако accum ще се нарича с различни процеси, резултатът също е непредвидим. Както и в предишния пример е честа причина за всичките си процеси.
Също входящ загуба може да се случи, когато изразът се използва повече от един път една и съща променлива.
В този случай, SQR (х) макро няма да работи правилно, ако аргумента, че е различен за всеки достъп.