如何修复此pthread_create类型错误?

时间:2017-11-18 20:28:40

标签: c

我正在尝试在课程中使用线程,但一直遇到一个让我陷入困境的错误。

我正在尝试使用它:

 pthread_create(&pro, NULL, producer, (void *) &temp);
 pthread_create(&con, NULL, consumer, (void *) &temp);

调用这些函数:

 void producer (void *t)
 void consumer (void *t)

我从导师给我的例子中学习了这段代码,但我不知道给我的例子是否有效。

我得到的警告是:

task2.c:37:5: warning: passing argument 3 of ‘pthread_create’ from
incompatible pointer type [enabled by default]

pthread_create(&con, NULL, consumer, (void *) &temp);
                           ^ In file included from task2.c:3:0: 
  /usr/include/pthread.h:244:12: note: expected ‘void * (*)(void *)’ but
    argument is of type ‘void (*)(void*)’

我在编译时使用gcc -pthread,我也收到producer()函数的类似警告。这是我第一次尝试线程化,因此pthread_create()的使用对我来说是新的。

有人可以帮助澄清这个问题吗?

3 个答案:

答案 0 :(得分:4)

您的功能与您在错误中所述的void * (*)(void *)预期类型不符。

尝试更改您的功能以返回void *

答案 1 :(得分:1)

我应该宣布我的职能为;

void *producer (void *t);

我的第四个论点不需要(void *)。

答案 2 :(得分:-1)

尝试使用gcc -lpthread

进行编译