2012-01-23 14 views
10

Mam problem ze zrozumieniem, dlaczego shared_ptr używa instrukcji atomowych procesora ... Nie mogę znaleźć przyczyny, ponieważ nie jest bezpieczne wątku. Czy ktoś może wyjaśnić.Dlaczego std :: shared_ptr przy użyciu operacji atomowych cpu

Jeśli zastanawiasz się, skąd wiem, że używa on atomowych inturacji: był klip z C++ i nie tylko, gdzie Herb i Andrei o tym rozmawiają, ale nigdy nie wspominają o powodach, dlaczego tak jest.

Odpowiedz

15

Każde wystąpienie shared_ptr jest bezpieczne dla wielu wątków. Dane, na które wskazuje, nie są bezpieczne wielowątkowo. Zobacz this.

Instrukcje atomowe, jeśli są właściwie stosowane (ochrona wykonywana w tej samej kolejności przez konkurencyjny dostęp do wątków) jest jednym ze sposobów na wdrożenie bezpieczeństwa wątków. Innym sposobem jest użycie muteksów.

Zobacz podobne pytanie do doładowania: Is boost shared_ptr xxx thread safe?

+6

być bardziej szczegółowe: do dzielonej liczby odnośników wewnątrz 'shared_ptr' można uzyskać dostęp przez wiele wątków. Dlatego konieczne jest inkrementowanie/zmniejszanie go atomowo. –

2

Herb Sutter tylko używane shared_ptr jako miły przykład w jego gotw 95, idzie tam, aby rozwinąć decyzji design:
https://herbsutter.com/2014/01/13/gotw-95-solution-thread-safety-and-synchronization/

+0

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać link do odsyłacza. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. (I jestem zbyt leniwy, aby wykonać tę pracę) – johnchen902

Powiązane problemy