• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Programowanie wielowątkowe, c++ VS winApi, dostęp do pamięci

Object Storage Arubacloud
0 głosów
314 wizyt
pytanie zadane 24 marca 2016 w C i C++ przez Nondzu Obywatel (1,910 p.)

Pracuje ostatnio nad troszkę większym projektem i głowię się nad problemami związanymi z wielowątkowością. Piszę w Visual Studio w C++ WinApi only konsola ;) Mam wątek główny i inny który pobiera mi dane z pewnych peryferii i zachodzi mi głowę pewna rzecz, mianowicie ona działa ale nie jestem pewny czy poprawnie jest to zrobione, a sam program musi być stabilny i nie może się wieszać. 

Działanie wygląda tak:
1. Wątek poboczny pobiera dane, po zebraniu wszystkich danych wywołuje poprzez wskaźnik moją funkcje, która jako argumenty dostaje te dane i je analizuje. 
2. W tej mojej funkcji wywołuje inne funkcje i korzystam z kilku struktur globalnych (wiem że globale nie są najlepsze, powoli zaczynam się do tego dostosowywać i je ograniczać ;) )
3. W wątku głównym programu również korzystam z tych funkcji i struktur.

Jeśli wywołuje moją funkcję poprzez wskaźnik w wątku, to czy możliwe jest, w głównej pętli programu zostanie wywołana w tym samym czasie ta sama funkcja bądź wykorzystana ta sama struktura bądź zmienna ? Puki co program się nie wysypuje i nie ma błędów z dostępem do pamięci, tylko czy aby na pewno taki sposób jest dobry ? 

Będę wdzięczny za każdą podpowiedź. 

Pozdrawiam 

3 odpowiedzi

+2 głosów
odpowiedź 24 marca 2016 przez niezalogowany
Tak, jeżeli 2 różne wątki korzystają z tych samych zasobów to istnieje prawdopodobieństwo że w tym samym czasie zaczną pracować na tych samych danych, a wtedy mogą stać się różne złe rzeczy. Skorzystaj z np mutexów.
+1 głos
odpowiedź 24 marca 2016 przez mbabane Szeryf (79,280 p.)

To co opisujesz to jest chyba najwiekszy problem w wielowatkowosci bo nie ma za bardzo sposobu na to zeby dowiedziec sie kiedy system operacyjny wykona dany watek i kiedy uruchomi nastepny.

Ogolnie, sposoby na zwalczanie takich problemow znajduja sie pod haslem synchronizacja watkow/procesow.

0 głosów
odpowiedź 24 marca 2016 przez Nondzu Obywatel (1,910 p.)
Dziękuje Wam za odpowiedzi, chyba będę musiał rozeznać się bardziej z tematem wielowątkowości. Jak pisałem program nie zawiesza się i pracuje (puki co) prawidłowo jednak nie chcę aby podczas jego prezentacji i jego późniejszego działania zaczął się wieszać i powodować problemy. Tworzenie nowych wątków jest bardzo pomocne gdy czas reakcji jest krytyczny, jednak nie tak proste jakby się wydawało, myślałem że wskaźniki rozwiążą trochę problemów ;)

Pozdrawiam

Kamil

Podobne pytania

0 głosów
1 odpowiedź 241 wizyt
pytanie zadane 10 stycznia 2019 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 187 wizyt
0 głosów
1 odpowiedź 361 wizyt
pytanie zadane 25 marca 2016 w C i C++ przez MasterFlamaster Początkujący (300 p.)

92,687 zapytań

141,598 odpowiedzi

320,087 komentarzy

62,048 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...