2011-01-09 135 views
2

我想知道在Linux上如何创建互斥锁?我想通了,那pthread_mutex_init()变量值不变,所以如何“创建”互斥量?在Linux上如何创建互斥锁?

它将这个变量标记为某种系统资源还是什么?

我正在实施的R值构造函数的类,它有它的身体pthread_mutex_t场,我不知道该怎么移动互斥弗罗姆一类到另一个...

回答

4

你可以看到什么pthread_mutex_init确实here(警告,你的大脑会受到伤害)。

它执行memset()互斥锁。

但是,互斥实现在futex调用之上。这适用于内存地址,即 其中一个pthread_mutex_t成员的地址被用作系统资源。 这意味着您不能复制/移动pthread_mutex_t。

1

你似乎想要将互斥锁的所有权交给另一个类。你确定这是解决你的问题的正确方法吗?如果你确实需要,虽然这样做,你可以创建一个auto_ptr以绕过所有权:

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

    auto_ptr<pthread_mutex_t> mutex; 
} 
+0

那么,这是一些colution,但是我是想实现一个R值的构造函数,以避免使用动态内存alocation。而且,当使用C++ 0x时,我们应该避免'auto_ptr'。 – Goofy 2011-01-09 23:01:55