[OSy] Dealokovanie detached vlakna po normalnom skonceni

Michal Klempa michal.klempa at gmail.com
Thu Nov 4 10:52:53 CET 2010


To same kdyz zavolam dvakrat thread_kill ze jo:)


On Thu, 4 Nov 2010 10:47:45 +0100
Michal Klempa <michal.klempa at gmail.com> wrote:

> :) OK, tak to asi zvladnem nejakym garbage collectorom.
> 
> Este pridam otazku, ze ci mozu dva thready volat rozne metody
> thread_xxx na jednu thread_t.
> 
> Tym by sa mi mohlo stat, ze jeden ide thread killnut - je na zaciatku
> funkcie thread_kill, este nezakazal interrupty. schedule.
> druhe vbehne do metody thread_join povedzme, je na zaciatku, nestihol
> zakazat interrupty. schedule.
> 
> prvy killne a uvolni vlakno.schedule.
> 
> druhy zakaze interrupty a saha na dealokovanu pamat lebo mu vlakno
> zmizlo pod rukami. A to sa mu stalo, lebo mu zradny kolega poslal svoj
> thread_t handle (co je u nas pointer na strukturu thread).
> 
> V zadani nie je vyslovene napisane (alebo som zas noob?) ze ci to je
> dovolene/zakazane takto tie vlakna pouzivat.
> Ak je to dovolene, musim si navzdy pamatat nejake handles vlaken s
> tym, ze toto je platne a pointer je tam, toto je neplatne, daj
> volajucemu facku.
> 
> D~
> Michal Klempa
> 
> On Thu, 04 Nov 2010 10:31:11 +0100
> Petr Tuma <petr.tuma at d3s.mff.cuni.cz> wrote:
> 
> > Dobry den,
> > 
> > neeeeee :) jednoduchy ale chybny program neni to, co jsem mel na
> > mysli, kdyz jsem rikal, ze je nekdy lepsi preferovat jednoduchy
> > program pred slozitym.
> > 
> > Samozrejme neni pripustne, aby se pouzivala pamet, ktera jiz byla 
> > dealokovana (a mimochodem tohle jsou presne situace, kdy si muzete 
> > prichystat neprijemne chvilky ladeni pozdejsich casti zadani).
> > 
> > Petr Tuma
> > 
> > 
> > On 11/04/2010 10:11 AM, Michal Klempa wrote:
> > > Zdravim,
> > > vlakno sa pocas behu stalo detached, jeho main { } normalne
> > > skonci. V takom pripade ma kernel uvolnit strukturu thread_t a
> > > pamat urcenu na stack vlakna.
> > >
> > > Prvy approach ->  miesto main { } daj do panenskeho kontextu
> > > vlakna moju funkciu execute:
> > > execute {
> > >   thread->main(thread->data);
> > > disable_int
> > >   free(thread->stack);
> > >   free(thread);
> > >   schedule();
> > > }
> > >
> > > Tak na to pozeram a nechapem, co sa stane pri switch_cpu_context.
> > > Execute bezi v kontexte vlakna, ktore prave rusim, a ja pamat kde
> > > je tento kontext ulozim. Takze hoci ju uvolnim, ulozi tam
> > > switch_cpu_context este moj kontext ako by to ukladal na vrch
> > > zasobnika? Tu pamat nikto nestihne medzicasom pouzit... snad?
> > >
> > > Je toto ten easy approach, ktory ocakavate? Aby som zas nevymyslal
> > > hardcore veci:-)
> > >
> > > Dik. Michal Klempa
> > >
> > > _______________________________________________
> > > OSy mailing list
> > > OSy at d3s.mff.cuni.cz
> > > https://d3s.mff.cuni.cz/mailman/listinfo/osy
> > 
> > _______________________________________________
> > OSy mailing list
> > OSy at d3s.mff.cuni.cz
> > https://d3s.mff.cuni.cz/mailman/listinfo/osy
> 





More information about the NSWI004 mailing list