Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ pthread条件是对象还是什么?_C++_Pthreads_Conditional Statements - Fatal编程技术网

C++ pthread条件是对象还是什么?

C++ pthread条件是对象还是什么?,c++,pthreads,conditional-statements,C++,Pthreads,Conditional Statements,我使用的地图如下: 密钥-->任务ID 值-->pthread\u cond\t对象 当某个任务完成时,我会使用匹配的pthread\u cond\t元素唤醒所有与其关联的pthread 我的问题很简单-什么是pthread\u cond\t?它是物体吗?因为如果我删除它,映射会调用它的构造函数,这对我来说是不好的。如果不是,我能回来吗 pthread_cond_t cond = *(_flushCond->operator [](task_id)); //map of condition

我使用的地图如下:

密钥-->任务ID

值-->
pthread\u cond\t
对象

当某个任务完成时,我会使用匹配的
pthread\u cond\t
元素唤醒所有与其关联的
pthread

我的问题很简单-什么是
pthread\u cond\t
?它是物体吗?因为如果我删除它,映射会调用它的构造函数,这对我来说是不好的。如果不是,我能回来吗

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

我试图做的是释放map中的对象以供以后使用(我重用ID),并返回那里的
pthread\u cond\t
对象。

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

在STL映射中,不能安全地或至少可移植地使用pthread_cond______________________t作为值。原因是,对值的要求是可复制构造和可分配的。从技术上讲,这在pthread条件下是可行的,但事实并非如此


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

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

在STL映射中,不能安全地或至少可移植地使用pthread_cond______________________t作为值。原因是,对值的要求是可复制构造和可分配的。从技术上讲,这在pthread条件下是可行的,但事实并非如此


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

pthread是一个C API,因此不会有构造函数或任何东西。您应该能够自由地传递它。但是它是否有任何指针,或者除基元类型之外的任何其他类型?它是不透明类型,因此您的代码不应该关心其中的内容。它是一个结构。不要依赖于任何特定的东西,它的目的是不透明的。我只需要知道我使用的赋值是否合法,我猜它是一个C API,所以不会有构造函数或任何东西。您应该能够自由地传递它。但是它是否有任何指针,或者除基元类型之外的任何其他类型?它是不透明类型,因此您的代码不应该关心其中的内容。它是一个结构。不要依赖于有任何具体的,它的目的是不透明的好吧,我只需要知道我使用的转让是合法的,我想是的