linux 线程控制

本文详细介绍了Linux下线程控制的API,包括获取线程ID、线程创建、线程属性定制、线程退出及线程阻塞等待等操作。通过实例解释了如何使用pthread_join和pthread_detach函数来管理线程的终止状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Linux线程控制API

1. 获取线程自身的线程ID。


2.线程创建。

参数说明:

tidp: 当线程创建成功时,tidp指向的内存单元被设置为新创建线程的线程ID。

attr:attr参数用于定制各种不同的线程属性。设为NULL时,创建默认属性的线程。

start_rtn: 函数指针,新创建的线程从start_rtn函数的地址开始运行,该函数只有一个无类型指针参数arg,如果需要指向start_rtn函数传递的参数不止一个,那么需要将这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。


线程创建时并不能保证哪个线程会先运行(即不能保证是新创建线程先运行还是调用线程先运行)。新创建的线程可以访问进程的地址空间。

3.线程退出


调用pthread_join后,当前线程将一直阻塞,直到指定的线程退出。如果指定线程以return方式退出,则rval_ptr中保存返回码,如果是被取消,则rval_ptr指定的内存单元就置为PTHREAD_CANCELED。

注意,默认情况下,线程的终止状态会保存到对该线程调用pthread_join。所以,在线程结束时,一般要调用pthread_join来清除线程的终止状态。

如果线程已经处于分离状态,线程的底层存储资源可以在线程终止时立即被收回。当线程被分离时,并不能用pthread_join函数等待他的终止状态。对分离状态的线程进行pthread_join的调用会产生失败,返回EINVAL。

pthread_detach函数可以使线程进入分离状态。



### Linux 环境下线程控制教程 #### 创建线程Linux环境中,创建新线程通常使用`pthread_create()`函数。此函数接受四个参数:指向线程标识符的指针、属性设置、线程执行的起始例程以及传递给该例程的参数。 ```c #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); ``` 这段代码展示了如何定义和调用`pthread_create()`来启动一个新的线程[^1]。 #### 获取线程ID 每一个线程都拥有独一无二的线程ID,类型为`pthread_t`。为了获取当前正在运行线程的ID,可利用`pthread_self()`函数: ```c pthread_t tid; tid = pthread_self(); printf("Thread ID is %lu\n", (unsigned long int)tid); ``` 上述片段说明了怎样取得并打印出当前线程的身份编号。 #### 终止线程 有几种方法可以让一个线程结束自己的生命周期。一种方式是让其返回自动生成的结果值;另一种则是显式地调用`pthread_exit()`函数,并传入状态码作为退出原因。 ```c void pthread_exit(void *retval); // 或者在线程函数内直接return某个值; void* thread_function(void *arg){ ... return NULL; // 表示正常终止 } ``` 这里解释了两种不同的途径使得线程能够安全地中止运作[^3]。 #### 同步机制 为了避免竞争条件的发生,需要采用同步手段如互斥锁(`mutex`)来进行保护共享资源访问。下面是一个简单的例子展示如何声明、初始化及销毁一把互斥锁。 ```c pthread_mutex_t mutex; // 初始化互斥锁 if (pthread_mutex_init(&mutex, NULL) != 0) { printf("\n mutex init failed\n"); return 1; } // 锁住临界区之前... pthread_mutex_lock(&mutex); // ...解锁之后 pthread_mutex_unlock(&mutex); // 当不再需要时释放资源 pthread_mutex_destroy(&mutex); ``` 这部分内容介绍了基本的互斥锁定操作以确保多线程间的协调一致[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值