2012-05-08 59 views
0

我使用的是图如下:pthread_cond_t是一个对象还是什么?

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

+0

pthread是一个C API,所以不会有构造函数或任何东西。你应该能够自由地传递它。 –

+0

但它有没有任何指针,或其他任何原始类型? – yotamoo

+2

这是一个不透明的类型,所以你的代码不应该关心里面的东西。 –

回答

3

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

您不能安全地或至少可移植地将pthread_cond_t用作STL映射中的值。原因是,对价值的要求是可复制和可分解的。虽然技术上可行的是pthread_cond_t,但它不是legal to do so

您应该存储一个pthread_cond_t *(指针),而不是像其他类型的“可复制”那样。

相关问题