• 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

VPS Starter Arubacloud
0 głosów
291 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ź 226 wizyt
pytanie zadane 10 stycznia 2019 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 176 wizyt
0 głosów
1 odpowiedź 263 wizyt
pytanie zadane 25 marca 2016 w C i C++ przez MasterFlamaster Początkujący (300 p.)

92,305 zapytań

141,109 odpowiedzi

318,585 komentarzy

61,756 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...