komunikacja między wątkami

0

Mam 4 wątki - każdy z nich realizuje takie same zadania. Przyjmijmy, że każdy dodaje do siebie dwie liczby.
I do tego jeszcze 5 wątek (nazwijmy go wątek główny), który losowy wybiera jeden z 4 wątków i przesyła do wybranego dwie liczby, które należy do siebie dodać.

  1. Całość musi działać na zasadzie "eventów" - wątek główny wysyła powiadomienie do wybranego wątku, że należy do siebie dodać dwie liczby, czyli coś na zasadzie "pętla (śpij 100ms sprawdź czy nic nie ma)" odpada.
  2. Kod musi działać na różnych systemach operacyjnych.
  3. Może się tak zdarzyć, że dany wątek zanim obliczy sumę dwóch liczb, to już dostanie kolejne do obliczenia - nie może to blokować wątku głównego - wątek roboczy musi przyjąć żądanie i obsłużyć je asynchronicznie.
    Czyli:
    wątek główny
losowyWatek.oblicz(liczba1, liczba2)
losowyWatek.oblicz(liczba1, liczba2)
losowyWatek.oblicz(liczba1, liczba2)
losowyWatek.oblicz(liczba1, liczba2)
losowyWatek.oblicz(liczba1, liczba2)

wątek obliczeniowy

oblicz (liczba1, liczba2) {
asynchronicznie_oblicz(liczba1, liczba2)
}
asynchronicznie_oblicz(liczba1, liczba2) {
suma = liczba1 + liczba2
gdzies_tam_sobie_zapisz(suma)
}

jakieś rady jak to rozwiązać?
linki, przykłady whatever?

0
  1. Nikt za Ciebie tego nie zrobi.
  2. Muszą być 4 wątki? Wydaje mi się, że dwa wątki: główny i obliczeniowy wystarczą.
  3. Zrób pulę zdarzeń do przetworzenia: Zdarzenie: (typ zdarzenia; dane/parametry). Operacje na tej puli powinny odbywac sie w sekcjach krytycznych. Typ zdarzenia powinien okreslac ktory watek ma je przetworzyc
  4. Nie powiedziales co sie ma dziac z wynikami obliczen
0

krwq dobrze prawi. Jeżeli jednak potrzebujesz bardziej bezpośredniej pomocy napisz mi PM i pogadamy.

0
  1. A umiesz czytać? Prosiłem o gotowe rozwiązanie, czy linki, które mnie nakierują na rozwiązanie?
  2. 4 to akurat przykład, założenie jest takie, że liczba wątków = liczba rdzeni procesora
  3. Jeśli dobrze rozumiem, to wątek obliczeniowy w przypadku gdy nie będzie nic w kolejce, będzie zasypiał na XX ms? - tego chciałbym uniknąć
  4. na razie nic, w każdym razie wątek obliczeniowy już sobie z tym poradzi - żadne dane nie mają wracać do wątku głównego.

Zastanawiałem się nad tym, żeby każdy wątek nasłuchiwał na 127.0.0.1 na jakimś dowolnym porcie. Wątek główny miałby listę wątek 1 -> port 1234, wątek 2 - > port 2345 etc. i wysyłałby żądanie na dany port.
Nie wiem czy takie rozwiązanie ma sens i czy nie jest to rzeźbieniem w gó****.

Powtórzę jeszcze raz - nie oczekuję tutaj gotowego kodu, tylko linku, nazwy jakiejś biblioteki, cokolwiek co mnie nakieruje na sposób jak to rozwiązać, aby było wydajnie i dobrze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1