Odpalenie na warunku

Odpalenie na warunku
SE
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:5
0

Witam. Mam dwa wątki, dwie pętle. Gdy jedna nie spełnia warunku, zmienia wartość zmiennej, tak by odpaliła się druga, ale ta nie odpala :|
Kod:

Kopiuj
stan = 0;
wartosc=1;
void Jeden(){
     while(wartosc==1){
           if(stan>0){
               costam;
          }
          else {
               wartosc=2;
               break;
          }
     }
}

void Dwa(){
     while(wartosc==2){
          costam;
     }
}

Nie wiedząc czemu nie chce się odpalić funkcja Dwa.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Bo ten kod nie ma sensu? Przecież jeśli warunek wartosc==2 nie jest spełniony to wątek od razu zakończy funkcje. A ty chyba chciałeś jakieś "aktywne czekanie" tutaj zrobić?


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
SE
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:5
0

Wątki działają w nieskończoność.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

No to moze pokaż konkretnie kod który uruchamiasz a nie jakis snippet bez sensu? Bo trudno diagnozować problem skoro nie raczyłeś pokazać co ci konkretnie nie działa.
Szczególnie że jak na program wielowątkowy to w tych twoim kodzie jest cała masa błędów w stylu check-then-act, race condition i zupełny brak brania pod uwagę thread-safety pewnych operacji. Nie ma tam zadnych instrukcji triggerujacych memory barrier więc mógłbyś w ogóle nie widzieć zmian z tego drugiego wątku przez jakis false-sharing w cache.
Jakby te zmienne chociaż były volatile albo były jakimiś AtomicX...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.