pthread

pthread

offline
  • meka  Male
  • Počasni građanin
  • Pridružio: 06 Avg 2003
  • Poruke: 811
  • Gde živiš: Novi Sad / Vojvodina

Da li je moguce iz jednog thread-a ubiti drugi i na koji nacin? Meni sa pthread_cancel i pthread_kill nije poslo za rukom. Pomoc?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • mr_W 
  • Počasni građanin
  • Pridružio: 22 Mar 2004
  • Poruke: 835

Nemoj ni da pokušavaš da "ubijaš" threadove na taj način. Mnogo bolje je da uspostaviš harmoniju u tvojoj aplikaciji i da smisliš način da signaliziraš threadove kad im je vreme da sami poumiru.

Evo daću ti jedan banalan primer zašto je loša ideja ubiti thread "nasilno"..

npr, taj thread koji želiš da ubiješ trenutno nešto radi, nešto radi npr sa nekom listom ili nizom, čiji je pristup zaštitio tako što je lock()-ovao neki odgovarajući mutex.

I sad ga ti ubiješ u sred pipkanja tog niza, i dok on drži lockovan mutex. Thread je ubijen, i mutex ostaje lockovan do beskraja, jer sada više ne postoji thread koji može da ga unlockuje. A takvu situaciju jednostavno ne možeš da detektuješ ni ispraviš. Zato bolje kaži threadu, pre neke globalne ili member promenljive da je vreme da ode na spavanje. I onda thread kad detektuje takvu direktivu, može lepo da završi svoj posao i vrati stanje u normalu pre nego što sam uradi pthread_exit()



offline
  • meka  Male
  • Počasni građanin
  • Pridružio: 06 Avg 2003
  • Poruke: 811
  • Gde živiš: Novi Sad / Vojvodina

Pa dobro. Pitanje je ustvari bilo "kako da kazem necemu da zavrsi radnju kad ja stisnem dugmence?" Sto je najgore, pthread_cancel() radi sada. Nemam pojma sta sam zasrao prvi put. U svakom slucaju, palo je i meni to na pamet i jedna ABNORMALNO nasilna stvar tipa try_unlock(). Moze li neki url ka kakvom tutorialu kako se ovo radi?

offline
  • mr_W 
  • Počasni građanin
  • Pridružio: 22 Mar 2004
  • Poruke: 835

Kako da kazes necemu ? pa to je jako jednostavno.

napravi globalnu promenljivu:

bool zavrsi_radnju = false;


// thread koji radi radnju

while(!zavrsi_radnju) {
/* radi to sto radi */
}

// thread koji ce da mu kaze da zavrsi radnju


zavrsi_radnju = true;



eto. Cela mudrost.

Ko je trenutno na forumu
 

Ukupno su 871 korisnika na forumu :: 48 registrovanih, 5 sakrivenih i 818 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: anta, bankulen, bojank, cikadeda, dankisha, darionis, darkangel, Dimitrije Paunovic, Dimitrise93, DonRumataEstorski, Dovla, drimer, dushan, Georgius, hyla, Ilija Cvorovic, Ivica1102, Krvava Devetka, Kubovac, laurusri, Lošmi, MB120mm, mercedesamg, Metanoja, milenko crazy north, MiroslavD, mocnijogurt, mrav pesadinac, Ne doznajem se u oružje, nemkea71, nikoladim, nuke92, pein, Pohovani_00, radoznao, rajkoplje, rodoljub, Romibrat, saputnik plavetnila, SR-3m, Srle993, stegonosa, vlajkox, zbazin, ZetaMan, zlaya011, šumar bk2, 79693