0

我正在使用如下地图:

键 ---> 任务 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那里的对象。

4

1 回答 1

3

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

您不能安全地或至少可移植地使用 pthread_cond_t 作为 STL 映射中的值。原因是,对值的要求是可复制构造和可赋值。虽然在技术上这对 pthread_cond_t 是可行的,但这样做是不合法的

您应该存储一个 pthread_cond_t* (指针),就像您对其他不可复制的类型所做的那样。

于 2012-05-08T19:37:43.563 回答