Synchronizacja w dostępie do danych

0

Witam,

Pytanie odnośnie synchronizacji. Przykładowo mam klasę z listą (np map z STL). Aplikacja ma kilka wątków. W zależności od akcji użytkownika może nastąpić np filtrowanie i wyświetlenie tylko części pozycji. Jaki jest najlepszy sposób na kontrolowanie dostępu do listy by w środku iterowania inny proces nie dodał elementu czy nie skasował pozycji? Nie chodzi o dostęp do tego samego kodu (pamięci) ale o ochronę przed wykonaniem innej akcji jak dodawanie/usuwanie/itd w sytuacji gdy wykonuje się np iterowanie po liście w celu filtrowania więc critical section chyba tu nie ma zastosowania a raczej implementacja jakiegoś sematora np w obrębie klasy.

Z tego co rozumiem critical section powinno byc globalne dla aplikacji wielowatkowej i CS->Acquire/CS->Release() użyte w wątkach wykorzystujących np tą samą główną funkcje (jeden fragment pamięci) by zapewnić dostęp do niej i wykonanie kodu w całości przez jeden wątek a następnie przekazanie sterowania do drugiego wątku by mógł ją wykonać (a nie jednocześnie).

Pozdrawiam

0

Najprostszym rozwiązaniem jest użycie zwykłego lock'a. W prostych apkach często jest to wystarczające rozwiązanie.

0

sematora

Semafora :)
Tak jak napisał @several, wystarczy zwykły mutex.

0

Czyli najlepiej napisać małą klasę z mutexem i funkcją oczekującą z jakimś timeoutem aby wstrzymać działanie wątku/funkcji do czasu zwolnienia zasobu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1