在结构

时间:2019-12-26 23:23:20

标签: c multithreading struct

我有这样的结构:

typedef struct runnable
{
    /* something */
    struct runnable *next;
} runnable_t;

在某些功能中:

int myFun(runnable_t runnable)
{
   /* something */
   runnable.next = NULL;
   pool->first = &runnable;
   pthread_cond_signal(&(pool->myCond));
   pthread_mutex_unlock(&(pool->lock));
}

在其他func2中:

if (pool->first == NULL)
            pthread_cond_wait(&(pool->myCond), &(pool->lock));

printf("%d\n",pool->first);

好吧,所以:myFunc应该将runnable-> next设置为NULL并发出myCond信号,然后我需要在其他函数中使用runnable-> next。

问题在于func2内部:runnable-> next不为NULL。我检查了两个函数中可运行的地址是否相同,而其他可运行的atrr也正确。只有这个“下一个”道具。不是。我以为我对struct和'next'的定义可能就是原因。

什么是区别甜菜 struct runnable_t * nextrunnable_t * next(如果可能的话)

有问题吗?

1 个答案:

答案 0 :(得分:0)

问题在于您没有在int myFun(runnable_t runnable)中通过引用传递结构,因此仅复制结构更改,而不是原始传递的结构

u必须将函数的行为更改为int myFun(runnable_t* runnable),并将函数(runnable.中的runnable->更改为runnable->next = NULL;