Cześć. Zaczynam uczyć się programowania wielowątkowego. Chcę stworzyć prosty program, który będzie składał się z trzech wątków przesyłających między sobą informację. Jeden wątek powinien dostawać informacje od dwóch pozostałych i przesyłać im informacje od siebie. Natomiast te dwa pozostałe mają przesyłać informację do głównego wątku i odbierać od niego, ale między sobą się nie będą komunikowały. Nie wiem jednak jak się zabrać do tego od strony architektury aplikacji. Mam stworzyć 3 klasy: Thread1, Thread2, ThreadMain i w każdej z tych klas jako pole dodać kolejkę, na którą inne wątki będą wrzucałe swoje wiadomości? Czy to jest dobry pomysł? Może jest jakieś lepsze rozwiązanie, np. wszystkie kolejki deklarowane poza klasami? Z góry dziękuję za wszystki podpowiedzi.
Wielowątkowość w programowaniu obiektowyym
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 3573
W czym programujesz? I czemu tak chcesz robić?
Generalnie lepiej unikać komunikacji między wątkami i współdzielonych zmiennych(chyba że niemutowalnych)
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Silesia/Marki
- Postów: 5555
To co chcesz zrobić brzmi jak prymitywny system aktorów. W jakim języku to robisz? Robisz to dla siebie czy na zadanie na studia? Bo jeśli dla siebie to taka rzeźba może nie mieć sensu i lepiej wziąć jakiś bardziej wysokopoziomowy framework wielowątkowości
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: 700m n.p.m.
- Postów: 681
Najlepiej gdybyś opisał problem który ma za zadanie rozwiązać program, wtedy łatwiej Ci pomóc.
Pamiętaj, że przy komunikacji między wątkami, czy generalnie programowaniu wielowątkowym, trzeba dbać o synchronizację w dostępie do zasobów.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 7
Programuję w C++. Projekt robię dla siebie i docelowo ma być to apka która będzie bazować na pewnych zdarzeniach systemowych. Np. jak podłączę konkretnego pendrive'a to chcę na nim zrobić kopię zapasową. I to byłby jeden wątek. Do tego byłyby też wątki związane z innymi procesami. Niektóre z tych wątków mogą działać jednocześnie. Potrzebuję wątek nadzorujący te wszystkie pozostałe wątki, który zbierałby informację o tym, co dzieje się w pozostałych wątkach, bo chcę później przetwarzać te informacje. Chcę też mieć możliwość przesyłania informacji od głównego wątku do pozostałych, żeby wykonały jakieś konkretne operacje.
- Rejestracja: dni
- Ostatnio: dni
W C++ jest biblioteka thread, a do synchronizacji, szczególnie jeśli chodzi o obiekty używane w wielu wątkach naraz, jest biblioteka mutex. Nie wiem, czy to jest mutex czy monitor, bo w C# odpowiednikiem mutex, który robi to samo jest System.Threading.Monitor.
To, co jest najbardziej potrzebne:
https://en.cppreference.com/w/cpp/thread/thread
https://en.cppreference.com/w/cpp/thread/mutex