如何在Linux上创建互斥锁?

时间:2011-01-09 20:50:29

标签: linux c++11 pthreads

我想知道在Linux上如何创建互斥锁?我想,pthread_mutex_init()不会改变pthread_mutex_t变量的值,那么它是如何“创建”互斥的?

它是否将此变量标记为某种系统资源或什么?

我正在为类实现R值构造函数,它的主体中有一个pthread_mutex_t字段,我不知道如何 mutex从一个类移动到另一个类...

2 个答案:

答案 0 :(得分:4)

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

memset()是互斥锁。

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

答案 1 :(得分:1)

您似乎希望将互斥锁的所有权传递给另一个类。您确定这是解决问题的正确方法吗?如果你绝对需要这样做,你可以创建一个auto_ptr来传递所有权:

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

   auto_ptr<pthread_mutex_t> mutex;
}