"Program sie wywala" (wyciek pamieci?)

0

Zrobiłem symulacje życia pewnych organizmów na planszy. Każdy taki organizm odpala sie w osobnym watku i wykonuje jakies tam swoje czynnosci zyciowe. Problem polega na tym ze dla wiekszej ilosci organizmow (np 30) program bardzo szybko zawiesza sie. Objawia sie to w te sposob ze panel w ktorym jest to wszystko rysowane nie odswieza sie (komunikaty w konsoli sa nadal widoczne). Mozna uznac, ze po prostu w systemie jest za malo pamieci, jednak czasami ten problem pojawia sie dla mialej ilosci organizmow(watkow) i nie moge wychwycic w jakim momencie sie to dzieje. Jest na to jakis sposob?

0

Uruchom jakiś program, który pokazuje zużycie procesora(np. pod linuksem "top").
Jeżeli program zużywa więcej niż >90% czasu procesora, to czasem można zaobserwować efekt, który opisujesz.

Mam tylko nadzieję, że te 30 wątków używa jakichś sensowych mechanizmów synchronizacji.

0
__krzysiek85 napisał(a)

Uruchom jakiś program, który pokazuje zużycie procesora(np. pod linuksem "top").
Jeżeli program zużywa więcej niż >90% czasu procesora, to czasem można zaobserwować efekt, który opisujesz.

Mam tylko nadzieję, że te 30 wątków używa jakichś sensowych mechanizmów synchronizacji.

"Jeżeli program zużywa więcej niż >90%"
Tak wlasnie jest.
"Mam tylko nadzieję, że te 30 wątków używa jakichś sensowych mechanizmów synchronizacji."
Synchronizacja w tym programie to tylko wstawienie modyfikatora synchronized do metod, ktore watki odpalaja i modyfikuja wspolne dane. W praktyce nie chcialo mi sie zbytnio nad tym rozdrabniac i dalem modyfikator synchronized praktycznie do wszytskich metod, mozliwe ze to od tego?

0

może zrób inaczej, niech wątki wypluwają wyniki do jakiejś dynamicznej tablicy a program spokojnie będzie sobie rysować co ileś tam milisekund

pasi? =)

0
Potwoor_ napisał(a)

może zrób inaczej, niech wątki wypluwają wyniki do jakiejś dynamicznej tablicy a program spokojnie będzie sobie rysować co ileś tam milisekund

pasi? =)

Mysle ze to swietny pomysl, ze tez na to nie wpadlem :)Wieczorem bede mial czas, napisze i sie pochwale czy jest lepiej.

0

Zrobiłem, tak jak mi podpowiedział Potwoor_. Program zajmuje 40% procesora, przy takich samych warunkach jak wczesniej zabierał 90%. Jednak dalej potrafi stanąć w pewnym miejscu i nie wiem kompletnie dlaczego. Pomocy!

Gdzie szukac bledu? Mozliwe ze zwiecha jest spowodowana nieprawidlowa synchronizacja?

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