线程同步
_好好学习
这个作者很懒,什么都没留下…
展开
-
操作系统原理——死锁
1. 基本概念1.1 死锁、活锁,与饥饿死锁(Deadlock)在多道程序设计系统中,一组进程的每一个进程均无限期地等待被该组进程中的另一个进程所占有且永远不会释放的资源,这种现象称系统处于死锁状态,简称死锁。当死锁发生后,死锁进程将一直等待下去,除非有来自死锁进程之外的某种干预。活锁(Livelock)前提条件:当进入临界区互斥的时间很短,而阻塞等待的时间开销很大,那么在某种情况下,可采用轮询(忙等待)原语进入临界区或存取资源。在这种情况下,如果两个进程A和B,都需要两个资源1和2,当原创 2020-05-28 12:06:39 · 789 阅读 · 0 评论 -
C语言——多线程基础(pthread)
目录1. 线程的定义以及线程的创建1.1 线程和进程的概念1.2 使用pthread_create()函数创建进程2.使用pthread_join()等待线程结束2.1 使用pthread_join()等待线程结束2.1 使用pthread_join()得到线程函数的返回值1. 线程的定义以及线程的创建1.1 线程和进程的概念线程:进程中的一个实体,是CPU调度和分派的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存..原创 2020-05-27 15:15:24 · 28685 阅读 · 4 评论 -
线程同步——信号量
参考学习资料:进程线程互斥与同步1.信号量mutex初始化后为0;上锁后+1,解锁后-1;mutex只能串行。信号量可以并行,运行多个线程同时访问共享资源。1.1 头文件#include <semaphore.h>1.2 变量类型//类型名 变量名sem_t sem;1.3 主要函数(1)初始化信号量sem_init(sem_t* s...原创 2020-05-06 11:08:52 · 470 阅读 · 0 评论 -
线程同步——条件变量
1 条件变量】使用读写锁、互斥锁可以阻塞线程,使对临界代码的操作变为原子操作。其临界区代码只有两种状态,锁定和非锁定。而如果需要外部的条件判断之后才执行某些临界区代码,比如经典的生产者-消费者模型,生产者和消费者对资源的使用时互斥的,但是消费者对资源的使用还有一个前提就是资源不为空,但是这个判断互斥锁没法实现。因此需要使用条件变量,在消费者进入临界区并被告知当前无可用资源的时候,阻塞消费者...原创 2020-05-06 10:08:22 · 183 阅读 · 0 评论 -
线程同步——读写锁
参考学习资料:进程线程互斥与同步1. 读写锁1.1 读写锁变量pthread_rwlock_t lock; (一个变量是一把锁)读写锁使用时,一个变量是一把锁。1.2 读写锁类型读锁:对内存做读操作; 写锁:对内存做写操作。1.3 读写锁的特性线程A加读锁成功,又来了三个线程,做读操作,可以加锁成功。(读共享 - 并行处理) 线程A加写锁成功,又来了三个线程,做...原创 2020-05-06 09:35:19 · 359 阅读 · 0 评论 -
线程同步——互斥锁
参考学习资料:进程线程互斥与同步1. 互斥锁(互斥量)1.1 变量类型:互斥锁类型创建一把锁://变量类型 变量名pthread_mutex_t mutex1.2 互斥锁的特点多个线程访问共享数据时是串行的,避免数据混乱。1.3 互斥锁缺点效率低(由于所有的并行都转串行,所以效率比较低)。1.4 互斥锁使用步骤创建互斥锁: pthread...原创 2020-05-06 08:43:53 · 480 阅读 · 0 评论