2010-02-17 21 views
8

Jaka jest różnica między funkcją ponownego wejścia a funkcją bezpiecznego wątku?Różnica między Re-entrant a funkcją Thread-Safe

+1

http: // stackoverflow.com/questions/2274254/what-kind-of-code-można-nazwać-ponownie-uczestnikiem/2274289 # 2274289 –

+0

bardzo podobne, jeśli nie identyczne: http://stackoverflow.com/questions/856823/threadsafe-vs- ponownie zgłoszony –

Odpowiedz

1

Czy sprawdziłeś numer wiki article on the subject. Wyjaśnia to dobrze, więc zobacz pełną dyskusję.

Kilka odpowiednie bity z artykułu:

W informatyce, program komputerowy lub podprogram nazywa wklęsłego, jeżeli może być przerwany w połowie jego realizacji, a następnie można bezpiecznie ponownie wywoływany ("re -entered ") przed wykonaniem poprzednich wywołań. Przerwanie może być spowodowane przez działanie wewnętrzne, takie jak skok lub wywołanie, lub przez działanie zewnętrzne, takie jak zakłócenie sprzętowe lub sygnał. Po zakończeniu ponownego wywoływania poprzednie wywołania zostaną wznowione.

i

Definicja ponowne wejścia różnią się od wątku bezpieczeństwa w środowisku wielowątkowych. Podprogram reentrantowy może osiągnąć bezpieczeństwo gwintu, ale sam reentrant może nie wystarczyć do zapewnienia bezpieczeństwa w każdej sytuacji. Odwrotnie, kod zabezpieczający wątek niekoniecznie musi być ciągły (patrz przykłady poniżej).

+4

Proszę zamieścić faktyczną odpowiedź, która podsumowuje link w przypadku, gdy stanie się zimny (jak ma to miejsce tutaj i teraz). – nedR

2

Re-uczestnik oznacza brak stanu globalnego (tylko lokalny).

Bezpieczny wątek oznacza, że ​​nie ma możliwości, aby 2 (lub więcej) wątków kolidowało ze sobą (zapisując sprzeczne wartości).

+0

ale jak mówi Brian, artykuł wiki wyjaśnia to dobrze ... –

2
  • wątku bezpieczny funkcja można nazwać równocześnie z wielu wątków, nawet gdy inwokacje używać udostępnionych danych, ponieważ wszystkie odniesienia do wspólnych danych są szeregowane.

  • Funkcja reentrant może również nazwać jednocześnie z wielu wątków, ale tylko wtedy, gdy każdy inwokacja wykorzystuje swoje własne dane.

Stąd funkcja bezpieczny wątku jest zawsze wklęsłego, ale reentrant funkcja nie zawsze jest bezpieczny wątku.

Różnicę można cottoned na powyższy przykład

Klasa mówi się wklęsłego, jeżeli jego funkcje składowe można nazwać bezpiecznie z wielu nici, tak długo, jak każdy gwint wykorzystuje inną wystąpienie klasy. Klasa jest wątkowo bezpieczna, jeśli jej funkcje mogą być bezpiecznie wywoływane z wielu wątków, nawet jeśli wszystkie wątki używają tej samej instancji klasy.

Źródło: Qt

Powiązane problemy