一个信号量本质是一个整数值,它和一堆函数联合使用,这一对函数通常称为P和V;希望进入临界区的进程将在相关信号量上调用P;如果信号量的值大于零,则该值会减少1,进程可以继续执行;相反,如果信号量的值为0或者更小,则进程必须等待知道其他人释放该信号量;对信号量的解锁通过调用V完成;该函数增加信号量的值, ...
分类:
系统相关 时间:
2019-10-29 17:09:33
阅读次数:
96
在linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。在linux下有多种进程间通信的方法:半双工管道、命名管道、消息队列、信号、信号量、共享内存、内存映射文件,套接字等等。使用这些机制可以为linux下的网络服 ...
分类:
系统相关 时间:
2019-10-26 21:19:11
阅读次数:
109
管程和信号量这两个同步原语在 Java 语言中的实现,理论上用这两个同步原语中任何一个都可以解决所有的并发问题。那 Java SDK 并发包里为什么还有很多其他的工具类呢?原因很简单:分场景优化性能,提升易用性。 其中有个非常普遍的并发场景:读多写少场景。实际工作中,为了优化性能,我们经常会使用缓存 ...
分类:
其他好文 时间:
2019-10-25 13:42:22
阅读次数:
119
来源 UNIX 网络编程(第二版) 管道 是一种广泛的IPC形式,即可在程序中使用,也可在shell中使用。管道的问题在于它们只能在具有共同祖先的进程中使用,不过该问题已随有名管道即FIFO的引入而解决了。 消息队列 同步机制 需要某种同步形式,往往是为了防止多进程同时修改同一文件 记录上锁 信号量 ...
分类:
其他好文 时间:
2019-10-21 13:34:03
阅读次数:
82
sem mutex=1;//取号机互斥信号量 sem empty=10;//空余座位信号量 sem full=0;//已占座位信号量 sem service=0//等待叫号数量 顾客() { p(empty); p(mutex); 取号 v(mutex); v(full); p(service); ... ...
分类:
其他好文 时间:
2019-10-20 19:38:08
阅读次数:
77
回到主线程 延时执行 开启一个异步线程 开启一个同步线程 线程优先级 分组执行 串行队列:只有一个线程,加入到队列中的操作按添加顺序依次执行。 并发队列:有多个线程,操作进来之后它会将这些队列安排在可用的处理器上,同时保证先进来的任务优先处理。 信号量 oc中dispatch_group_enter ...
分类:
编程语言 时间:
2019-10-18 19:21:49
阅读次数:
134
互斥锁 互斥锁的特性: 1. 原子性:当有一个线程成功拿到了这个锁,其他线程都无法在相同的时间拿到这个锁 2. 唯一性:在一个线程拿到锁的这段时间,只有当这个线程把锁释放掉,其他的线程才有可能拿到 3. 非繁忙等待性:如果一个线程已经锁定了一个互斥量,第二个线程又视图去拿到这个锁的前线,则第二个锁将 ...
分类:
其他好文 时间:
2019-10-15 21:21:06
阅读次数:
124
IPC 信号 一、信号的定义 1、用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。 2、信号是UNIX/Linu ...
分类:
其他好文 时间:
2019-10-15 19:30:16
阅读次数:
99
一 信号量 信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所,但公共厕所容纳的人数是 ...
分类:
其他好文 时间:
2019-10-13 10:57:56
阅读次数:
94