• 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

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
255 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,300 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ź 163 wizyt
pytanie zadane 10 stycznia 2019 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 159 wizyt
0 głosów
1 odpowiedź 170 wizyt
pytanie zadane 25 marca 2016 w C i C++ przez MasterFlamaster Początkujący (300 p.)

90,823 zapytań

139,496 odpowiedzi

313,570 komentarzy

60,317 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...