2011-01-09 3 views
2

Ich würde gerne wissen, wie Mutex auf Linux erstellt wird? Ich habe herausgefunden, dass pthread_mutex_init() Wert von pthread_mutex_t Variable nicht ändert, so wie es Mutex "erstellen"?Wie wird Mutex unter Linux erstellt?

Markiert diese Variable als eine Art Systemressource oder was?

I R-Wert Konstruktor für Klasse wurde die Umsetzung, die in seinem Körper ein pthread_mutex_t Feld hat, und ich weiß nicht, wie man bewegen Mutex frome eine Klasse zum anderen ...

Antwort

4

Sie sehen können, was Pthread_mutex_init tut here (Warnung, Ihr Gehirn wird weh tun).

Es tut memset() der Mutex.

Mutexe werden jedoch zusätzlich zu den Aufrufen futex implementiert. Dies funktioniert bei Speicheradressen, d. H. Die Adresse eines der pthread_mutex_t-Mitglieder wird als eine Systemressource verwendet. Dies bedeutet, dass Sie ein pthread_mutex_t nicht kopieren/verschieben können.

1

Offenbar möchten Sie den Mutex an eine andere Klasse weitergeben. Sind Sie sicher, dass dies der richtige Weg ist, um Ihr Problem zu lösen? Wenn Sie absolut es aber tun müssen, könnten Sie eine auto_ptr erstellen Eigentum passieren um:

class A 
{ 
    A(const A & other) mutex(other.mutex) { /* ... */ } 

    auto_ptr<pthread_mutex_t> mutex; 
} 
+0

Nun, das einige colution ist jedoch war ich versucht, einen R-Wert Konstruktor zu implementieren mit dynamischen Speicher alocation zu vermeiden. Außerdem sollten wir bei Verwendung von C++ 0x 'auto_ptr' vermeiden. – Goofy