2010-09-20 10 views
6

Dzisiaj uczestniczyłem w wywiadzie, w którym ankieter zadał mi następujące pytanie:Czy są to wątki bezpieczne?

Czy ponowne wciągnięcie i wzajemne wykluczenie może być bezpieczne? Czy możesz mi wytłumaczyć dlaczego ?

Jestem stosunkowo nowy do programowania współbieżnego i nie mógł go odebrać .. Ale powiedziałem ...

Wzajemne wykluczanie jest bezpieczeństwo wątków. Ale ponowne podbijanie nie jest i to jest powód, dla którego mamy ponownie wprowadzić zamki.

Ankieter przeszedł do następnego pytania choć w innym miejscu ... Myślę, że ten jeden się zawiedli ...

Co on spodziewa mi powiedzieć, kiedy ten zapytał mnie?

Odpowiedz

5

Właściwa odpowiedź powinna być:

Tak, są one implementacją bezpieczeństwa wątków.

ponownego entrancy

Tworzenie kodu w taki sposób, że może być częściowo wykonywane przez jeden zadania powróciła innego zadania, a następnie wznowione z pierwotnym zadaniem. Wymaga to zapisania informacji o stanie w zmiennych lokalnych dla każdego zadania, zwykle na stosie, zamiast w statycznych lub globalnych zmiennych.

jeden przykład

Wzajemne wykluczanie

dostęp do wspólnych danych jest szeregowane za pomocą mechanizmów, które zapewniają tylko jeden wątek odczytuje lub zapisuje dane udostępnione w dowolnym momencie. Zachowanie dużej ostrożności jest wymagane, gdy fragment kodu uzyskuje dostęp do wielu współdzielonych elementów danych, takich jak warunki wyścigu, zakleszczenia, blokady na żywo, głód i różne inne dolegliwości wyszczególnione w wielu podręcznikach systemów operacyjnych.

jeden przykład

+0

Dlaczego jeden głos w dół ??? –

+0

(-1) Re-entrancy nie jest pauza i wznowić. Funkcja jest ponownie wprowadzana, jeśli obsługuje ona wiele wątków wykonawczych "przechodzących" w tym samym czasie lub w prostych słowach można wejść do funkcji podczas wykonywania innej funkcji. –

+0

http://pl.wikipedia.org/wiki/Thread_safety http://stackoverflow.com/questions/352365/code-re-entrancy-vs-thread-safety –

0

cytuję http://en.wikipedia.org/wiki/Reentrant_(subroutine)

Obie koncepcje ponowne wejścia i bezpieczeństwa wątku odnosi się do sposobu funkcje obsługi zasobów. Jednak nie są one takie same.

Podczas gdy pojęcie ponownego wpisu może wpływać na zewnętrzny interfejs funkcji, bezpieczeństwo wątku dotyczy tylko implementacji funkcji, a nie jej zewnętrznego interfejsu.

- W większości przypadków, aby dokonać ponownego wprowadzania funkcji niereendenta, jego interfejs zewnętrzny musi być zmodyfikowany tak, aby wszystkie dane były dostarczane przez wywołującego funkcję.

- Aby funkcja wątku była niebezpieczna dla wątków, konieczna jest zmiana jedynie implementacji, zwykle poprzez dodanie bloków synchronizacji w celu ochrony współdzielonych zasobów przed współbieżnymi dostępami przez różne wątki.

Dlatego też przywrócenie jest bardziej podstawową cechą niż bezpieczeństwo gwintu i z definicji prowadzi do bezpieczeństwa gwintów: każda funkcja ponownego wprowadzania jest wątkowa; jednak nie każda funkcja bezpieczna dla wątków jest wewnętrzna.

Powiązane problemy