2011-09-08 9 views
5

Ponieważ muteks w większości systemów jest zaimplementowany z opcjami CAS, zastanawiałem się nad porównaniem wydajności tych dwóch konstrukcji.próba wywołania mutex w połączeniu z wywoływaniem CAS

Czy można powiedzieć, że jeśli muteks jest zaimplementowany przy użyciu CAS, to wywołanie try-lock dla tego muteksu będzie miało taką samą/podobną wydajność w porównaniu z operacjami CAS?

CAS, będąc w dużej mierze zależny od systemu, myślałem, czy można go zastąpić bardziej ogólnie znanym/wystandaryzowanym wyprowadzeniem, mutex try-lock.

Odpowiedz

4

Twoje rozumowanie jest prawidłowe; przy każdej rozsądnej implementacji koszt operacji "trylock" będzie mniej więcej taki sam jak CAS. Jednak CAS ogólnie nie może być zastąpiony przez trylock; trylock to słabszy prymityw, który nie może manipulować dowolnymi danymi.

2

To niesprawiedliwe powiedzieć cokolwiek o względnej wydajności CAS przeciwko zamkowi. Różne systemy operacyjne wdrażają blokady na bardzo różne sposoby. Win32 musi zmienić kontekst w jądro, które jest wolne, Linux ma muteksy przestrzeni użytkownika. Wydajność będzie się również znacznie różnić w zależności od tego, w jaki sposób krytyczna sekcja jest kontestowana. Musisz również wziąć pod uwagę to, co robisz w sekcji krytycznej, czy zwiększasz jedną liczbę całkowitą, czy wykonujesz złożoną operację? Jest więc wiele zmiennych, które wchodzą w relatywną wydajność i nie można na ich temat wypowiadać się w szerokim zakresie.

Polecam korzystanie z twojego języka/platform najłatwiejsze wykorzystanie abstrakcji blokowania. Zmierz wydajność i sprawdź, czy jest dla ciebie do przyjęcia.

+0

Win32 ma muteksy przestrzeni użytkownika ('CriticalSection's), to tylko problem terminologii. –

Powiązane problemy