gpt4 book ai didi

c - pthread,带有双指针的链表

转载 作者:行者123 更新时间:2023-11-30 17:31:49 24 4
gpt4 key购买 nike

到目前为止,我终于为我正在制作的一些测试应用程序创建了一个准确的消费者-生产者类型模型,但最后一点给我带来了一些问题。

我为我的应用程序设置了 2 个结构。一个用于链接列表,用作必须完成的工作列表。另一种是特定于每个线程的结构,其中包含指向链表的双指针。我不使用单个指针,因为那样我无法修改一个线程中的指针并检测另一个线程中的更改。

//linked list struct:

typedef struct list_of_work list_of_work;
struct list_of_work {
// information for the work

list_of_work *next;

};

//thread struct:

typedef struct thread_specs {

list_of_work **linked_list;

unsigned short thread_id;

pthread_mutex_t *linked_list_mtx;

} thread_specs;

thread_specs 中的双指针绑定(bind)到 list_of_work 结构的根的双指针,如下所示:

在主要部分:

list_of_work                         *root;
list_of_work *traveller;
pthread_t thread1;
thread_specs thread1_info;

// allocating root and some other stuff
traveller = root;
thread1_info.linked_list = &traveller;

这一切都有效,没有警告或错误。

现在我继续创建我的 pthread:

pthread_create(&thread1, NULL, worker, &thread1_info )

在我的 pthread 中,我执行了 2 次强制转换,一次强制转换 thread_info 结构,另一次强制转换链表。 ptr 是我的论点:

thread_specs            *thread = (thread_specs *)ptr;
list_of_work *work_list = (list_of_work *)thread->linked_list;
list_of_work *temp;

这不会引发任何错误。

然后我有一个名为 list_of_work *get_work(list_of_work *ptr) 的函数,该函数可以工作,所以我不会发布整个内容,但正如你所看到的,它期望看到一个指针到链表,它返回同一个链表的指针(要么是NULL,要么是下一个工作)。

所以我使用这个函数来完成下一个工作,如下所示:

temp = get_work(*work_list);
if (temp != NULL) {
work_list = &temp;
printf("thread: %d || found work, printing type of work.... ",thread->thread_id);
}

现在这就是症结所在。如何正确转换并将指针传递到我的 get_work() 函数的第一个指针后面,以便它可以执行其操作。

我的编译器发出警告:

recode.c:348:9: error: incompatible type for argument 1 of ‘get_work’
recode.c:169:14: note: expected ‘struct list_of_work *’ but argument is of type ‘list_of_work’

感谢所有能帮助我的人!

最佳答案

根据您发布的函数 get_work() 的定义和错误消息,此问题在这里:

temp = get_work(work_list);
^
/* Notice there's no dereferencing here */

该函数需要一个指向 struct list_of_work指针,而您传递的是 struct list_of_work

关于c - pthread,带有双指针的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24460854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com