无法在结构中初始化条件变量

时间:2013-04-12 16:06:03

标签: c pthreads

为什么我无法初始化结构中的条件变量? 我希望每个节点都有一个条件变量,所以我可以等待并发出信号,当我添加初始化代码时,它会抛出这个错误: 在'='之前预期':',',',';','}'或'属性' make: * [trie.o]错误1

我尝试在某处需要初始化时(不在结构中)并且我仍然收到错误,我已经包含了pthreads.h

struct trie_node {

  pthread_cond_t condition=PTHREAD_COND_INITIALIZER;
};

3 个答案:

答案 0 :(得分:1)

初始化结构成员时,不能使用PTHREAD_COND_INITIALIZER

创建结构实例后,必须使用pthread_cond_init

实际上,你不能在结构定义中初始化的结构成员,它不仅仅是这个。

答案 1 :(得分:0)

要在定义struct trie_node对象时进行初始化,请使用:

struct trie_node x = { …, PTHREAD_COND_INTIALIZER, … };

代替“...”,为结构的其他成员放置初始值设定项(如果有的话)。如果你不关心它们,你可以省略尾随的那些。

要为现有对象中的condition成员分配值,请使用:

x.condition = (pthread_cond_t) PTHREAD_COND_INITIALIZER;

两件事:

您使用的代码失败,因为在定义结构时无法指定成员的初始化。初始化与对象的定义有关,而不是类型的定义。

扩展PTHREAD_COND_INITIALIZER具有初始化程序的格式,类似于{ values }。它不是表达式,因此您无法在赋值语句中正常使用它。但是,上面显示的(pthread_cond_t) PTHREAD_COND_INITIALIZER会创建一个表达的“复合文字”。

答案 2 :(得分:-1)

要初始化结构成员,您必须按如下方式创建结构实例。

struct trie_node my_node;

然后你可以像下面那样初始化它。

my_node.condition = PTHREAD_COND_INITIALIZER;

OR

struct trie_node * my_node; my_node->条件= PTHREAD_COND_INITIALIZER;