pthread_t
是Linux操作系统中用于表示线程ID的数据类型。它是pthread库中定义的一种数据类型,用于在程序中唯一标识一个线程。
使用pthread_t
的基本步骤如下:
pthread_t
之前,需要包含头文件pthread.h
。pthread_create()
函数创建一个新线程。该函数接受四个参数:第一个参数是pthread_t
类型的变量,用于存储新线程的ID;第二个参数是一个指向回调函数的指针,该函数在新线程中执行;第三个参数是一个指向参数的指针,该参数将传递给回调函数;第四个参数通常设置为0,表示没有特殊的属性。pthread_create()
函数返回一个整数,表示新线程的创建状态。如果创建成功,返回0;否则返回错误代码。pthread_t
类型的变量来管理该线程。例如,可以使用pthread_join()
函数等待线程结束,或者使用pthread_detach()
函数将线程设置为分离状态,使其在结束时自动释放资源。pthread_cancel()
函数来终止该线程。这将向线程发送一个取消请求,线程应该在可取消状态下响应取消请求并终止执行。需要注意的是,pthread_cancel()
并不保证线程会立即终止,而是等待线程完成当前的任务或者达到某个取消点。下面是一个简单的示例程序,演示了如何使用pthread_t
创建和管理线程:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
void* print_hello(void* arg) {
printf("Hello from thread %ld\n", (long)arg);
pthread_exit(NULL);
}
int main() {
pthread_t threads[5];
int rc;
long t;
for (t = 0; t < 5; t++) {
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, print_hello, (void*)t);
if (rc) {
printf("ERROR: return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
for (t = 0; t < 5; t++) {
pthread_join(threads[t], NULL);
}
pthread_exit(NULL);
}
在这个示例程序中,我们创建了5个线程,每个线程打印一条消息。我们使用pthread_create()
函数创建线程,并将线程ID作为参数传递给回调函数print_hello()
。然后,我们使用pthread_join()
函数等待每个线程结束。最后,主线程也调用pthread_exit()
函数退出。