• 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 VPS - 50% taniej przez 3 miesiące!
0 głosów
355 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,260 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ź 268 wizyt
pytanie zadane 10 stycznia 2019 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 202 wizyt
0 głosów
1 odpowiedź 462 wizyt
pytanie zadane 25 marca 2016 w C i C++ przez MasterFlamaster Początkujący (300 p.)

93,103 zapytań

142,077 odpowiedzi

321,562 komentarzy

62,445 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...