一、线程的基本操作
pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg)
:此函数用于创建新线程。thread
用于存储新创建线程的标识符,attr
可指定线程属性,start_routine
是线程执行的函数指针,arg
为传递给线程执行函数的参数。pthread_exit(void *retval)
:线程通过此函数主动退出,retval
可携带退出状态或结果。pthread_cancel(pthread_t thread)
:用于向指定的thread
发送取消请求。
二、线程的资源回收
pthread_join(pthread_t thread, void **retval)
:适用于子线程执行任务较短,且主线程需要获取子线程的结束状态或结果。若子线程顺利结束,retval
可获取返回值。pthread_detach(pthread_t thread)
:适用于子线程执行时间较长,主线程无需关心其状态,子线程结束后资源自动释放。 功能: 分离线程 参数: thread 要分离的线程的tid 返回值: 成功 0 失败 错误码
三、线程与进程的对比
- 本质区别:线程是 CPU 执行的最小单位,进程是资源分配和任务调度的基本单位。
- 线程创建和调度速度快,能实现更高的并发程度。
- 特点对比:
- 线程:
- 优点:共享进程的数据空间,方便共享数据。
- 缺点:安全性较差,易导致资源竞争。
- 进程:
- 优点:各进程空间相互独立,安全性好。
- 缺点:进程间共享数据较为复杂。
- 线程:
四、线程间的资源竞争
- 概念:线程间存在共享资源,其中的临界资源访问需谨慎处理。
- 临界区:即访问共享资源(临界资源)的那段代码。
- 解决方案 - 互斥锁:
- 定义:
pthread_mutex_t mutex;
- 初始化:
pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)
,attr
通常设为NULL
以使用默认属性。 - 加锁:
pthread_mutex_lock(pthread_mutex_t *mutex)
,确保线程排他性地访问临界资源。 - 解锁:
pthread_mutex_unlock(pthread_mutex_t *mutex)
,在访问结束后释放锁。 - 销毁:
pthread_mutex_destroy(pthread_mutex_t *mutex)
,资源不再使用时进行销毁。
- 定义:
五、线程间的顺序问题
使用信号量来解决线程间的顺序问题,它类似于交通信号灯,可控制线程有序访问临界资源。 信号量 --- 可以顺序操作的一把锁
标签:attr,thread,void,Linux,mutex,pthread,线程 From: https://blog.csdn.net/lijiaweixx/article/details/141229788