我的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应该在NULL和信号myCond旁边设置runnable->,然后我需要在其他函数中使用runnable->next。
问题是在func2: runnable->next中不是空的。我已经检查过了,两个函数的runnable地址是相同的,runnable的其他地址也是正确的。只有这个“下一个”道具。不是。我假设我对struct和'next‘的定义是合理的。
什么是struct runnable_t * next和runnable_t * next的差异(如果可能的话)
这有问题吗?
发布于 2019-12-30 15:00:21
问题是在int myFun(runnable_t runnable)中不会通过引用传递结构,所以只会更改结构的副本,而不是原始传递的结构
您必须将函数行为更改为int myFun(runnable_t* runnable),并在函数中将runnable.更改为runnable-> (runnable->next = NULL;)
https://stackoverflow.com/questions/59494408
复制相似问题