Synchronizacja w dostępie do danych

Synchronizacja w dostępie do danych
YA
  • Rejestracja: dni
  • Ostatnio: dni
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

several
  • Rejestracja: dni
  • Ostatnio: dni
0

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

freemp3
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Miechów
  • Postów: 284
0

sematora

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

YA
  • Rejestracja: dni
  • Ostatnio: dni
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?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.