我需要在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对象(以及列表中的其他对象)应按其地址进行比较和分配。
答案 0 :(得分:0)
您可以直接检查pthread_mutex_t
,因为只有两个相同的互斥锁的唯一方法是明确复制一个。没有完全可靠的方法来比较C中的两个不透明类型,但在C ++中,您应该能够在==
上使用pthread_mutex_t
。
或者,您可以拥有一个静态int nextId
,并在每次从头开始创建互斥包装时获取唯一ID;复制包装时复制id。当然,只有当它是调用pthread_mutex_init
的包装器本身,或者如果用户承诺永远不会从一个互斥锁构造两个包装器时,它才有效。