一、互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理。 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行的修改,没错,速度是慢了,牺牲了速度而保证了数据安全。 1.上厕所的小例子:你上厕所的时候肯定得锁门... ...
分类:
编程语言 时间:
2019-09-23 22:31:32
阅读次数:
122
上一篇文章 "可见性有序性,Happens before来搞定" ,解决了并发三大问题中的两个,今天我们就聊聊如何解决原子性问题 原子性问题的源头就是 线程切换 ,但在多核 CPU 的大背景下,不允许线程切换是不可能的,正所谓「魔高一尺,道高一丈」,新规矩来了: 互斥: 同一时刻只有一个线程执行 实 ...
分类:
其他好文 时间:
2019-09-23 09:34:49
阅读次数:
85
一、GIL全局解释器锁 cpython中自带的GIL全局解释器,GIL本身就是一把互斥锁 重点: 其实就算我们在程序中写了一个线程的并行操作,实际上GIL会因为垃圾回收机制的问题,操作系统调度的问题,会把并行的线程还是变成了串行,这正是这个GIL全局解释器锁导致了同一进程的同一时刻只有一个线程在运行 ...
分类:
其他好文 时间:
2019-09-22 22:04:41
阅读次数:
127
第一.CountDownLatch 让一些线程阻塞知道另外一个线程完成一系列操作后才被唤醒CountDownLatch主要有2个方法,当一个或多个线程调用await方法时,调用线程会被阻塞。当其他线程调用countDown方法会将计数器减一(调用countDown方法的线程不会阻塞), 当计数器的值 ...
分类:
其他好文 时间:
2019-09-22 21:57:22
阅读次数:
118
一、进程和线程的关系 线程与进程的区别可以归纳为以下4点: 1. 地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。 2. 通信: "进程间通信IPC" ,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要 "进程同步" 和互斥手段的 ...
分类:
编程语言 时间:
2019-09-22 21:20:47
阅读次数:
101
Python程序中的线程操作 锁 一、同步锁 1.1多个线程抢占资源的情况 1.1.1对公共数据的操作 1.2同步锁的引用 1.3互斥锁与join的区别 有的同学可能有疑问:既然加锁会让运行变成串行,那么我在start之后立即使用join,就不用加锁了啊,也是串行的效果啊 没错:在start之后立刻 ...
分类:
编程语言 时间:
2019-09-22 19:37:36
阅读次数:
91
进程和线程的区别 一、进程和线程的关系 线程与进程的区别可以归纳为以下4点: 1. 地址空间和其他资源(如打开文件):进程间相互独立,统一进程的个线程间共享。某进程内的线程在其他进程不可见。 2. 通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信—需要进程同步和互斥手段的 ...
分类:
编程语言 时间:
2019-09-22 18:04:59
阅读次数:
108
C++关于锁的总结(一) 线程中的锁分为两种, 互斥锁 和 共享锁 。 相关的头文件有 ,前者具有 操作,用于实现互斥功能,后者具有 操作,用于完成共享锁操作。 这里先讨论 这个类。 共享锁 如果需要使用共享锁,则需要使用到 这个类。具体讲解见 "这里" 该锁可用于保护被多个线程同时访问的共享数据。 ...
分类:
编程语言 时间:
2019-09-22 18:03:58
阅读次数:
140
操作系统特征: 并发:系统同时存在多个运行程序 共享:系统资源供内存中多个并发执行的进程使用(互斥,同时共享) 虚拟:空分复用技术(实际内存<<运行内存),时分复用(内存多个程序同时执行,处理机在小时间段内交替为各个进程服务) 异步:多道程序下,允许并发,执行是走走停停,以不可预知的速度向前推进。 ...
分类:
其他好文 时间:
2019-09-21 17:03:27
阅读次数:
75
'''一 信号量信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所,但公共厕所容纳的人 ...
分类:
其他好文 时间:
2019-09-20 21:15:16
阅读次数:
67