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



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

我为我的应用程序设置了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中的双指针被绑定到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次强制转换,1次强制转换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

相关内容

  • 没有找到相关文章

最新更新