title image


Smiley Re: Mutithread und Zeiger aus Liste
das hier könntest du erstmal als Grundlage (ohne threading support) verwenden.



Codeabschnitte der Art...



list::iterator front()

{

EnterCriticalSection(&m_cs);

// mach irgendwas

LeaveCriticalSection(&m_cs);

}



...sind in C++ mit multithreading problematisch. Wenn innerhalb des kritischen Abschnittes eine Funktion eine Ausnahme wirft, hast du einen deadlock, weil der kritische Abschnitt nicht mehr freigegeben wird.



class critical_section

{

public:

critical_section () { ::InitializeCriticalSection (&cs_); }

~critical_section () { ::DeleteCriticalSection (&cs_); }

void lock () { ::EnterCriticalSection (&cs_); }

void unlock () { ::LeaveCriticalSection (&cs_); }



private:

critical_section (critical_section const&);

critical_section& operator = (critical_section const&);



CRITICAL_SECTION cs_;

};



template <class T>

class lock

{

public:

lock () { t_.lock (); }

~lock () { t_.unlock (); }

private:

T t_;

};



list::iterator front ()

{

// hier soll der kritische Abschnitt beginnen ...

lock<critical_section> l;

return list::front ();

} // ... und hier endet er



Wenn innerhalb der Funktion eine Ausnahme auftritt, kümmert sich die Klasse lock<> um das Freigeben des kritischen Abschnittes.

cheers,

bf



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: