pthread_cond_t是一个对象还是什么?

时间:2012-05-08 18:25:03

标签: c++ pthreads conditional-statements

我使用的地图如下:

键--->任务ID

值---> pthread_cond_t个对象

当某项任务完成后,我会使用匹配的pthreads元素唤醒与其关联的所有pthread_cond_t

我的问题很简单 - 什么是pthread_cond_t?它是一个对象吗?因为如果我删除它,地图会调用它的构造函数,这对我不利。如果不是 - 我可以返回

pthread_cond_t cond = *(_flushCond->operator [](task_id)); //map of conditions
_flushCond->operator [](task_id) = NULL;
return cond;

我想要做的是释放地图中的对象供以后使用(我重用ID)并返回那里的pthread_cond_t对象。

1 个答案:

答案 0 :(得分:3)

正如其他人所评论的那样,对于实现定义的类型,它是一个opaque类型(或者如果你愿意的话)。在一些实现中,它可以是指向实际条件变量结构的指针,该结构本身仅是指向某个实现内部数据结构的指针。 POSIX标准对此没有任何保证或承诺,并且只允许您使用该类型的“对象”执行某些操作。在这方面,它与其他类型的Pthread非常相似,例如pthread_mutex_t或pthread_t。

您无法安全地或至少可移植地将pthread_cond_t用作STL地图中的值。原因是,对值的要求是可复制构造和可配置的。虽然技术上对于pthread_cond_t是可行的,但它不是legal to do so

您应该存储pthread_cond_t *(指针),就像使用其他不可“复制”的类型一样。