2011-01-09 20 views
2

Linuxでmutexがどのように作成されたのか知りたいですか?私は、pthread_mutex_init()の値がpthread_mutex_tの変数を変更しないので、どのように "作成"するのかを理解しましたか?Linuxでmutexはどのように作成されますか?

この変数に何らかの種類のシステムリソースが表示されていますか?

私はクラスのR値コンストラクタを実装して、それの体にpthread_mutex_tフィールドを持っていると私はあなたが何を参照することができますどのように移動ミューテックスフローム1クラス別に...

答えて

4

知りませんpthread_mutex_initはhereです(警告、あなたは脳を傷つけるでしょう)。

memset()はmutexを実行します。

しかし、mutexはfutexコールの上に実装されています。これはメモリアドレスで動作します。すなわち、 の1つのpthread_mutex_tメンバーのアドレスがシステムリソースとして使用されます。 これは、pthread_mutex_tをコピー/移動できないことを意味します。

1

mutexの所有権を別のクラスに渡したいと思うようです。それがあなたの問題を解決する正しい方法だと確信していますか?あなたは絶対にかかわらず、それを実行する必要がある場合は、あなたの周りの所有権を渡すauto_ptrにを作成することができます。

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

    auto_ptr<pthread_mutex_t> mutex; 
} 
+0

をまあ、これはいくつかのcolutionある、しかし私は、動的なメモリalocationの使用を避けるためにR値コンストラクタを実装しようとしていました。さらに、C++ 0xを使うときは、 'auto_ptr'を避けるべきです。 – Goofy

関連する問題