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.
W czym programujesz? I czemu tak chcesz robić?
Generalnie lepiej unikać komunikacji między wątkami i współdzielonych zmiennych(chyba że niemutowalnych)
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
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.
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.
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