c语言中如何创建线程thread_create()
C 语言标准库提供了创建线程的函数 pthread_create,该函数原型如下:
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
其中:
thread:用于存储新线程的唯一标识符。
attr:线程的属性值,如果为 NULL,表示使用默认属性。
start_routine:新线程要执行的函数指针,函数返回类型为 void*,参数为 void*。
arg:传递给新线程的参数,类型为 void*。
pthread_create函数返回值为 0 表示成功,否则表示出错。
下面是一个示例程序,演示如何使用 pthread_create 函数创建一个新线程,并执行一个简单函数:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *print_message(void *ptr) {
char *message = (char*) ptr;
printf("%s\n", message);
pthread_exit(NULL);
}
int main() {
pthread_t thread;
char *message = "Hello, world!";
if(pthread_create(&thread, NULL, print_message, (void*) message)) {
fprintf(stderr, "Error creating thread\n");
return 1;
}
pthread_join(thread, NULL);
return 0;
}
在这个示例程序中:
print_message 函数将传递给它的字符串打印到标准输出,并调用 pthread_exit 函数退出线程。
在 main 函数中,创建一个 pthread_t 类型的变量 thread,用于存储新线程的唯一标识符。
定义一个 char 指针变量 message,并将其指向字符串常量 "Hello, world!"。
调用 pthread_create 函数创建一个新线程,并传递 print_message 函数指针和 message 指针作为参数。
如果 pthread_create 函数返回值不为 0,说明创建线程失败,程序将输出错误消息并退出。
调用 pthread_join 函数等待新线程退出。
需要注意的是,创建的新线程会独立运行,且与主线程并行执行。在多线程程序中,需要考虑线程间的同步和互斥问题。