如何测试两个pthread互斥锁的相等性?

时间:2014-09-24 07:28:44

标签: c++ pthreads

我需要在pthread互斥锁上编写C ++包装器,并且我在实现operator ==时遇到了问题。有没有办法为我可以用于测试的pthread_mutex获取某种类型的唯一ID?

修改

为了更具体地说明我试图实现的目标,我有以下几点:

pthread_mutex_t mutex1;
pthread_mutex_t mutex2;
pthread_mutex_t mutex3;

pthread_mutex_init(&mutex1, NULL);
pthread_mutex_init(&mutex2, NULL);
mutex3 = mutex2;

我希望bool mutexCompare(pthread_mutex_t t1, pthread_mutex_t t2)函数为mutexCompare(mutex1, mutex2)返回false,mutexCompare(mutex2, mutex3)返回true

已经有一个int pthread_equal(ptrhead_t t1, pthread_t t2)可以完成我需要的线程。我需要一个类似的互斥体。

修改

<击> mutex3 = mutex2;

非常不鼓励上述作业。 POSIX文档声明

  

&#34;没有为pthread_attr_t,pthread_cond_t,pthread_condattr_t,pthread_mutex_t,pthread_mutexattr_t,pthread_rwlock_t和pthread_rwlockattr_t类型定义的比较或赋值运算符。&#34;

pthread_mutex_t对象(以及列表中的其他对象)应按其地址进行比较和分配。

1 个答案:

答案 0 :(得分:0)

您可以直接检查pthread_mutex_t,因为只有两个相同的互斥锁的唯一方法是明确复制一个。没有完全可靠的方法来比较C中的两个不透明类型,但在C ++中,您应该能够在==上使用pthread_mutex_t

或者,您可以拥有一个静态int nextId,并在每次从头开始创建互斥包装时获取唯一ID;复制包装时复制id。当然,只有当它是调用pthread_mutex_init的包装器本身,或者如果用户承诺永远不会从一个互斥锁构造两个包装器时,它才有效。