Frage zu Thread interrupts



  • Hallo,

    ich habe etwas in der Form:

    class fu
    {
    
    bar * func()
    {
      /// prüfe was
    
      boost::this_thread::disable_interruption disable_interrupt;
      /// beginne mit mach was tolles
    
    }
    
    ....
     while(true)
                {
                    try{
                         v= func();
                        {
                            boost::this_thread::disable_interruption disable_interrupt;
                            /// mache was tolles
                        }
                    }catch(...)
                    {
                        std::cout <<"\n Thread \t" <<boost::this_thread::get_id() << "Interrupted!!!!";
                        break;
                    }
                }
    ...
    };
    

    Ist es möglich, dass ein interrupt beim zurückkehren von func stattfindet ??
    Das sollte nicht zugelassen sein.



  • Cooperative Thread Cancellation hat doch mit Interrupts nix zu tun.

    ----

    boost::this_thread::disable_interruption::~disable_interruption ist laut Doku kein Interruption Point, also darf da auch nix rausfliegen.

    Könnte also noch im "prüfe was" Teil passieren.



  • Okay,

    moment ich muss jetzt bisschen was ordnen.
    Ich kann mit Cooperative Thread Cancellation nichts anfangen außer googeln..

    -----

    Das einzige wo ich die Interrupts zulassen möchte ist genau der Teil in "prüfe etwas".
    Habs so verstanden, dass der Code dann tut was er soll. Und zwar Interrupts nur
    im Teil "Prüfe was" zulassen und zwar Weil:

    -Der genannte Destruktor ist kein Interruptpoint
    -Funktionsaufrufe können unmöglich Interruptpoins sein (also der Funktionsaufruf an sich)
    -Und der Zuweisungsoperator = ist auch kein Interruptpoint.



  • Ja, so sehe ich das auch.

    Interrupt: http://en.wikipedia.org/wiki/Interrupt

    Cooperative Thread Cancellation (bzw. Cooperative Thread Interruption - scheint der üblichere Ausdruck zu sein), ist das Thema deiner Frage.
    Nur Cooperative Interruption ist was ganz anderes als Interrupts.

    Interrupts sind i.d.R. asynchron.
    Cooperative Interruption ist im Prinzip Polling, und vollkommen synchron.


Log in to reply