#include #include #include #include // union semun { // int val; // struct semid_ds *buf; // unsigned short *array; // struct seminfo *__buf; // }; in... ...
分类:
其他好文 时间:
2019-12-08 23:26:08
阅读次数:
122
一个数据文件可以被多个进程所共享,把只要求读文件的进程成为“Reader进程”,其他进程称为“Writer进程”,允许多个进程读,但是不允许一个Writer进程和其他进程一起读或者写。 读者: 在读者问题中,把readcount当成了互斥信号量,在执行readcount减减或加加之前都要指向p操作。 ...
分类:
系统相关 时间:
2019-12-07 19:41:06
阅读次数:
123
网络中进程之间如何通信 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是 ...
分类:
编程语言 时间:
2019-12-07 14:19:00
阅读次数:
77
设两个进程共用一个临界资源的互斥信号量mutex=1,当mutex=-1时表示()。 一个进程进入了临界区,另一个进程等待 没有一个进程进入临界区 两个进程都进入临界区 两个进程都在等待 互斥信号量不采用自旋锁的方式实现,mutex初始值为1,当一个准备进入临界区时,mutex - 1 = 0,该进 ...
分类:
系统相关 时间:
2019-12-02 23:18:33
阅读次数:
129
通过前面对 线程互斥锁lock / 线程事件event / 线程条件变量condition / 线程定时器timer 的讲解,相信你对线程threading模块已经有了一定的了解,同时执行多个线程的确可以提高程序的效率,但是并非线程的数量越多越好,可能对于计算机而言,你直接运行20~30线程可能没太 ...
分类:
编程语言 时间:
2019-11-30 12:10:49
阅读次数:
106
线程池: 一个线程池主要由以下的四个部分构成。 1 线程池管理器,负责创建线程和销毁线程,向工作队列中添加任务等。 2 工作线程,线程池当中负责执行任务的线程,当任务队列为空的情况下,则该线程处于等待的状态。 一般使用信号量来跟踪当先任务队列当中任务的数量,线程处于sem_wait()的状态,等待任 ...
分类:
编程语言 时间:
2019-11-30 11:56:52
阅读次数:
81
1,为啥需要自旋锁 很多时候我们并不能采用其他的锁,比如读写锁、互斥锁、信号量等。一方面这些锁会发生上下文切换,他的时间是不可预期的,对于一些简单的、极短的临界区完全是一种性能损耗;另一方面在中断上下文是不允许睡眠的,除了自旋锁以外的其他任何形式的锁都有可能导致睡眠或者进程切换,这是违背了中断的设计 ...
分类:
其他好文 时间:
2019-11-26 13:29:23
阅读次数:
72
背景从Linux内核2.6.25开始,CGroup支持对进程内存的隔离和限制,这也是Docker等容器技术的底层支撑。使用CGroup有如下好处:在共享的机器上,进程相互隔离,互不影响,对其它进程是种保护。对于存在内存泄漏的进程,可以设置内存限制,通过系统OOM触发的Kill信号量来实现重启。CGroup快速入门默认挂载分组Linux系统默认支持CGroup,而且默认挂载所有选项,可以使用moun
分类:
系统相关 时间:
2019-11-25 20:30:25
阅读次数:
107
在多进程程序中(vfork创建的多进程除外),即使是全局变量也无法共享,各个进程都会保存局部变量或全局变量的副本,供自己使用。 共享内存将文件地址映射到内存中即可让多个进程共享内存中的数据。 内存映射API #include<sys/mman.h> void *mmp(void *addr, siz ...
分类:
其他好文 时间:
2019-11-25 18:12:54
阅读次数:
80
一、CountDowmLatch(闭锁)(倒计数锁存器) CountDownLatch类位于java.util.concurrent包下,在完成某些运算时,只有其他所有线程的运算全部完成,当前运算才继续执行。 利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行 ...
分类:
其他好文 时间:
2019-11-21 13:56:57
阅读次数:
70