2016-05-24 11 views
6

Czy między procesami umieszczonymi w pamięci współdzielonej można używać SRW Locks?Blokada SRW w pamięci współdzielonej

Ich ślad pamięci wydaje się być pojedynczym wskaźnikiem, ale nie mogę znaleźć dokumentacji dotyczącej tego, co dzieje się w tle podczas blokowania.

Chciałbym uniknąć muteksów jądra, jeśli to możliwe, ale zaczyna wyglądać, jakbym wchodził w nieokreślone zachowanie.

+0

http://www.flounder.com/msdn_documentation_errors_and_omissions.htm#InitializeSRWLock –

Odpowiedz

5

SRW Blokady nie mogą być współdzielone między procesami. Wynika to z zaostrzonym pominięcie w zdaniu dokumentacji, która mówi

Slim odczytu/zapisu (SRW) Zamki umożliwić gwinty pojedynczego procesu dostęp do współdzielonych zasobów ...

Obiekty te wykorzystują fakt, że są używane w ramach jednego procesu. Na przykład wątki oczekujące na wejście do blokady są śledzone w postaci połączonej listy. Ta lista oczekujących wątków oczywiście musi być przechowywana gdzieś na zewnątrz poza SRWLockiem, ponieważ SRWLock jest tylko wielkością pojedynczego wskaźnika i nie można umieścić listy 10 wątków wewnątrz pojedynczego wskaźnika. Ta połączona lista nie będzie dostępna dla innych procesów.

0

SRW jest obiektem użytkownika (podobnie jak sekcje krytyczne), a nie obiektami jądra. Nie można ich udostępniać między procesami. Nie mają imienia.

SRW są implementowane dla wydajności - są szybsze niż sekcje krytyczne (i oczywiście szybsze niż muteksy). Nie zezwalają na blokadę rekursywną (dozwolone są CS i muteksy).

Ponieważ są zaimplementowane pod kątem szybkości i wydajności - są one przeznaczone tylko do tego samego dostępu do procesu. Umieszczenie uchwytu SRW na pamięci współużytkowanej nie spowoduje, że będzie dostępny inny proces, aby zacząć go używać. SRW to po prostu nieprzezroczysty uchwyt do wewnętrznej implementacji. Gdy uchwyt jest odwzorowywany przez proces, przechodzi on do tej samej granicy procesu - nie może być współużytkowany przez inny proces. Ponieważ nie są obiektami jądra, dziedziczenie obsługi również nie jest możliwe.

Powiązane problemy