死锁银行家算法 死锁 死锁的定义 如果一个线程集合中的每个线程都在等待这个集合中另一个线程的执行结果才能继续执行下去,若无其他外力,它们都无法推进,这就形成了死锁。 死锁的4个必要条件 1、互斥条件:一个资源在某时刻内只能允许一个线程进行访问; 2、占有且等待:一个线程A占有一部分资源,此时去申请另 ...
分类:
编程语言 时间:
2019-10-02 18:48:37
阅读次数:
80
2019-10-01 关键字:进程、线程、信号量、互斥锁 什么是程序? 程序就是存放在磁盘上的指令和数据的有序集合,就是源代码编译产物。 它是静态的。 什么是进程? 进程就是操作系统为执行某个程序所分配的资源的总称。进程是程序的一次执行过程,因此它与程序不同,它是动态的。它的生命周期包括创建、调度、 ...
分类:
编程语言 时间:
2019-10-01 16:01:47
阅读次数:
107
3.1 CopyOnWriteArrayList 简介 在很多应用场景中,读操作可能会远远大于写操作。由于读操作根本不会修改原有的数据,因此对于每次读取都进行加锁其实是一种资源浪费。我们应该允许多个线程同时访问List的内部数据,毕竟读取操作是安全的。 这和我们之前在多线程章节讲过 Reentran ...
分类:
编程语言 时间:
2019-09-30 18:31:38
阅读次数:
112
``` n = 4 # 以4皇后举例 result = [] # 放置互斥的列、左斜线、右斜线信息 cols= set() pie = set() na = set() def dfs(row, state): if row >= n: result.append(state) for col in... ...
分类:
其他好文 时间:
2019-09-30 16:38:49
阅读次数:
112
monitor概念 管程,监视器。在操作系统中,存在着semaphore和mutex,即信号量和互斥量,使用基本的mutex进行开发时,需要小心的使用mutex的down和up操作,否则容易引发死锁问题。为了更好的编写并发程序,在mutex和semaphore基础上,提出了更高层次的同步原语,实际上 ...
分类:
编程语言 时间:
2019-09-29 10:06:56
阅读次数:
178
[TOC] 序言 我的上一篇文章介绍了信号量的基础知识并利用这些基础知识进行了一个小实验以此来增进对信号量这个概念的感性认识。下面我们要介绍一种特殊得信号量:互斥信号量 在介绍互斥信号量之前,我们先来谈谈一种现象:优先级反转。优先级反转在可剥夺型内核中是比较常见的,在实时系统中不允许出现这种现象,因 ...
分类:
其他好文 时间:
2019-09-28 00:45:04
阅读次数:
122
举个例子: 刚参加工作的你,只能租房住,嫌房租贵就和别人合租了,两个人住一起只有一个洗手间,每天早上起床的时候,如果你室友在洗手间,你就只能等着,如果你强行进去,那画面就不可描述了。同样的问题,如果多个线程共享一个数据,并且对数据有读有写,那就需要注意共享数据的保护了。 使用互斥量保护共享数据: 当 ...
分类:
编程语言 时间:
2019-09-26 23:25:44
阅读次数:
100
#include<mutex> 包含四类锁: 1 std::mutex 最基本也是最常用的互斥类 2 std::recursive_mutex 同一线程内可递归(重入)的互斥类 3 std::timed_mutex 除具备mutex功能外,还提供了带时限请求锁定的能力 4 std::recursiv ...
分类:
编程语言 时间:
2019-09-25 10:57:44
阅读次数:
147
2019-09-24 1、为什么使用redis 分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要 ...
分类:
其他好文 时间:
2019-09-24 15:50:56
阅读次数:
54
一、go语言竞争状态、原子函数、互斥锁 下面代码例子是展示并发下公共数据操作,通过原子函数和互斥锁怎么解决。 package main import ( "sync" "runtime" "fmt" "sync/atomic" ) var( // counter是所有goroutine都要增加的变量 ...
分类:
编程语言 时间:
2019-09-24 10:28:13
阅读次数:
108