pthread_create创建多线程调用函数

网上找到一段多线程代码,复制过来编译总是报错,代码前部分摘录如下:

#include

void print_message_function (void *ptr);

int main()

{

    pthread_t thread1;      int ret_thrd1;

    ret_thrd1 = pthread_create(&thread1, NULL,(void *) print_message_function,NULL);

……

创建线程的这一步总是报错,说是强制转换出错。经朋友指出,被线程调用的print_message_function这个函数,在定义的时候应该是这样的:

void * print_message_function (void *ptr);

这样定义出来的,其实是一个函数指针,

然后在创建线程的时候,pthread_create函数的第三个参数,其实应该是一个二级函数指针(指针的指针)。

ret_thrd1 = pthread_create(&thread1, NULL,print_message_function,NULL);

那么就是需要注意,如果你想要定义一个函数,使它能够在多线程中使用,那么这个函数定义的时候应该用函数指针来定义

其实pthread_create函数第三个参数的准确描述应该是 void *(*func) (void*),这里要注意的是,被线程调用的函数的参数,必须是void*格式。举个例子

void * increse_num(void some); 这样定义的函数是不能被调用的,因为这个函数的参数是void,正确的定义方式是这样:void * increse_num(void* some);

另外说明一下这个some,就是用于接收我们pthread_create函数传入的第四个参数。

补充知识点:

假如一个函数是这样定义的:void myfunc (void);那么,函数名myfunc本身就是一个指向自身的函数指针。

你可能感兴趣的:(pthread_create创建多线程调用函数)