我有这样的结构:
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 * next
和
runnable_t * next
(如果可能的话)
有问题吗?
答案 0 :(得分:0)
问题在于您没有在int myFun(runnable_t runnable)
中通过引用传递结构,因此仅复制结构更改,而不是原始传递的结构
u必须将函数的行为更改为int myFun(runnable_t* runnable)
,并将函数(runnable.
中的runnable->
更改为runnable->next = NULL;