1.介绍
pthread_create
是一个在 POSIX 线程库中定义的函数,它用于创建一个新的线程。
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
其中:
-
thread
:是一个指向pthread_t
类型的指针,用于保存新创建的线程的线程标识符。 -
attr
:是一个指向pthread_attr_t
类型的指针,用于设置新创建的线程的属性。如果传入NULL
,则会使用默认的线程属性。 -
start_routine
:是一个函数指针,指向新线程应该执行的函数。这个函数应该接受一个void *
类型的参数,并返回一个void *
类型的结果。 -
arg
:是一个void *
类型的指针,会被传递给start_routine
函数。
函数成功时返回0,失败时返回一个错误号。
2.例子
#include <pthread.h>
#include <stdio.h>
void* print_hello(void* data) {
printf("Hello, World!\n");
return NULL;
}
int main() {
pthread_t thread_id;
int ret = pthread_create(&thread_id, NULL, print_hello, NULL);
if (ret != 0) {
printf("Error: pthread_create failed\n");
return 1;
}
pthread_join(thread_id, NULL); // 等待线程结束
return 0;
}
在这个例子中,我们创建了一个新的线程,这个线程运行 print_hello
函数,打印出 "Hello, World!"。我们没有指定任何线程属性,所以传入 NULL
。同时,我们也没有传入任何参数给 print_hello
函数,所以也传入 NULL
。
最后,我们使用 pthread_join
等待新创建的线程结束。这是一个常见的做法,如果主线程(也就是 main
函数)结束了,而新创建的线程还没有结束,那么新创建的线程也会被强制结束,可能会导致一些问题。所以通常我们会让主线程等待所有新创建的线程结束,再结束自己。
需要注意对于线程相关代码的编译需要链接上posix线程库:gcc xxx.c -lpthread -l是链接选项,pthread是库名称,默认不添加空格也可以添加空格gcc xxx.c -l pthread