pthread_create函数详解
时间: 2023-08-31 09:04:55 浏览: 203
undefined reference to ‘pthread_create’的解决方法
5星 · 资源好评率100%
pthread_create函数用于创建一个新的线程,其原型如下:
```
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`:传递给 `start_routine` 的参数。
函数返回值:
- 如果成功创建了新线程,pthread_create 函数返回 0。
- 如果出现错误,pthread_create 函数返回一个正整数错误码。
下面是一个例子,展示如何使用 pthread_create 函数创建一个新线程:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_function(void *arg) {
int thread_arg = *(int *)arg;
printf("Hello from thread %d\n", thread_arg);
return NULL;
}
int main() {
pthread_t thread;
int thread_arg = 1234;
int res = pthread_create(&thread, NULL, thread_function, &thread_arg);
if (res != 0) {
perror("pthread_create failed");
exit(EXIT_FAILURE);
}
printf("Created thread %ld\n", (long)thread);
pthread_exit(NULL); // 等待新线程结束
}
```
在这个例子中,我们首先定义了一个函数 thread_function,它将作为新创建线程的执行函数。我们将一个整数变量 thread_arg 作为参数传递给这个函数。在 thread_function 中,我们将这个参数打印出来。
在 main 函数中,我们首先创建了一个整数变量 thread_arg,并将其传递给 pthread_create 函数。pthread_create 函数会创建一个新的线程,并将 thread_function 函数指定为该线程的执行函数。在我们的示例中,我们将新线程的标识符存储在 pthread_t 类型的变量 thread 中。如果 pthread_create 函数返回错误,则程序将退出。否则,我们将新线程的标识符打印出来,并等待新线程结束。
以上就是 pthread_create 函数的详细介绍。需要注意的是,创建线程后,我们需要使用 pthread_join 函数等待新线程结束,并释放新线程所占用的资源。
阅读全文