在Linux中,使用POSIX线程(pthread)库可以轻松地创建和管理线程
pthread.h
头文件,以便使用pthread库中的函数和类型。#include <pthread.h>
void*
,并接受一个void*
类型的参数。void* my_thread_function(void* arg) {
// 线程执行的代码
return NULL;
}
pthread_create()
函数创建一个新线程。这个函数需要四个参数:pthread_t *thread_id
:一个指向pthread_t
类型的指针,用于存储新线程的ID。const pthread_attr_t *attr
:一个指向pthread_attr_t
类型的指针,用于设置线程属性。通常,可以将其设置为NULL
,以便使用默认属性。void *arg
:一个void*
类型的指针,将作为参数传递给线程函数。int main_thread_flag
:一个整数标志,用于指示是否为主线程。通常,可以将其设置为0。pthread_t thread_id;
int rc = pthread_create(&thread_id, NULL, my_thread_function, NULL);
if (rc != 0) {
// 创建线程失败时的处理
}
pthread_join()
函数等待线程结束。这个函数需要两个参数:pthread_t thread_id
:要等待的线程的ID。void **retval
:一个指向void*
类型的指针,用于存储线程函数的返回值。void *thread_return_value;
rc = pthread_join(thread_id, &thread_return_value);
if (rc != 0) {
// 等待线程失败时的处理
}
pthread_destroy()
函数销毁它。这个函数需要一个参数:pthread_t thread_id
:要销毁的线程的ID。rc = pthread_destroy(thread_id);
if (rc != 0) {
// 销毁线程失败时的处理
}
这是一个完整的示例程序:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void* my_thread_function(void* arg) {
printf("Hello from the new thread!\n");
return NULL;
}
int main() {
pthread_t thread_id;
int rc;
rc = pthread_create(&thread_id, NULL, my_thread_function, NULL);
if (rc != 0) {
printf("Failed to create thread\n");
exit(1);
}
printf("Hello from the main thread!\n");
rc = pthread_join(thread_id, NULL);
if (rc != 0) {
printf("Failed to join thread\n");
exit(1);
}
return 0;
}
编译并运行此程序,将看到主线程和新线程分别输出一条消息。