Linux 多线程(Multi-threading)

1、Linux 多线程概述

线程(thread)是包含在进程内部的顺序执行流,是进程中的实际运作单位,也是操作系统能够进行调度的最小单位。一个进程中可以并发多条线程,每条线程并行执行不同的任务

线程进程Process)的关系可以归结为以下几点:

序号 线程 进程
1 一个线程只能属于一个进程 一个进程可以有多个线程,但至少有一个主线程
2 - 资源分配给进程同一进程所有线程共享该进程所有资源
3 线程作为调度分配的基本单位 进程作为拥有资源的基本单位
4 线程不拥有系统资源,但可以访问隶属于进程的资源 进程是拥有资源的一个独立单位
5 - 创建撤销进程时,由于系统要为之分配回收资源,导致系统的开销大于创建撤销线程时的开销

多进程程序结构和多线程程序结构有很大的不同,多线程程序结构相对于多进程程序结构有以下的优势:
序号 描述
1 线程间有方便的通信数据交换机制
2 使用多线程可以加快应用程序响应

2、线程 管理

线程管理包含了线程的创建终止等待分离设置属性等操作。

序号 函数 描述
1 pthread_create() 创建 新线程
2 pthread_exit() 终止 线程
3 pthread_detach() 线程 分离
4 pthread_join() 线程 连接
5 pthread_attr_init() 初始化 属性对象
6 pthread_attr_destroy() 销毁 属性对象
7 pthread_attr_getdetachstate() 获取线程 状态
8 pthread_attr_setdetachstate() 设置线程 状态
9 pthread_attr_getstacksize() 获取线程 栈
10 pthread_attr_setstacksize() 设置线程 栈
11 pthread_self() 获取自己的线程ID
12 pthread_equal() 比较 两个线程 ID是否相等

3、互斥量(Mutex)

互斥量Mutex),又称为互斥锁,是一种用来保护临界区特殊变量,它可以处于锁定(locked)状态,也可以处于解锁(unlocked)状态:
序号 描述
1 如果互斥锁锁定的,就是某个特定的线程正持有这个互斥锁
2 如果没有线程持有这个互斥锁,那么这个互斥锁就处于解锁状态

每个互斥锁内部有一个线程等待队列,用来保存等待该互斥锁的线程。
当互斥锁处于解锁状态时,如果某个线程试图获取这个互斥锁,那么这个线程就可以得到这个互斥锁而不会阻塞
当互斥锁处于锁定状态时,如果某个线程试图获取这个互斥锁,那么这个线程将阻塞在互斥锁的等待队列内。

互斥量是最简单也是最有效的线程同步机制。程序可以用它来保护临界区,以获得对排它性资源的访问权。另外,互斥量只能被短时间地持有,使用完临界资源后应立即释放锁。
序号 函数 描述
1 pthread_mutex_init() 创建互斥量(动态初始化)
2 pthread_mutex_destroy() 销毁互斥量
3 pthread_mutex_lock() 加锁线程试图锁定互斥量的过程)
4 pthread_mutex_trylock() 尝试加锁
5 pthread_mutex_unlock() 解锁(将互斥量由锁定状态变为解锁状态
死锁是指两个两个以上的执行序列在执行过程中,因争夺资源而造成的一种互相等待的现象。
发布了125 篇原创文章 · 获赞 76 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/Hongwei_1990/article/details/97970156
今日推荐