我想知道在Linux上如何创建互斥锁?我想,pthread_mutex_init()
不会改变pthread_mutex_t
变量的值,那么它是如何“创建”互斥的?
它是否将此变量标记为某种系统资源或什么?
我正在为类实现R值构造函数,它的主体中有一个pthread_mutex_t
字段,我不知道如何将 mutex从一个类移动到另一个类...
答案 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;
}