
计算机操作系统
文章平均质量分 66
王文珏
游戏前端开发
展开
-
【进程&线程】临界区解决方法
大家都要用的变量叫临界区域(region)。 有几种手段可以避免ab线程一起进入临界区域: 1. 屏蔽中断 2. 锁变量 3. 严格轮换法 (前三个都有可能因为不是原子性操作而翻车) 4. Peterson解法(http://blog.youkuaiyun.com/martin31hao/article/details/8037455) #define N 2 /原创 2017-05-10 10:00:27 · 1570 阅读 · 0 评论 -
【进程&线程】睡眠与唤醒
无法进入临界区的时候选择阻塞而不是忙等待。有sleep和wakeup两个方法。 信号量semaphore up和down两种操作。down做减一操作,如果信号量大于0就减一,不然就睡眠线程。关键在于原子操作,所以一般是在系统层面的。 首先两个进程同时运行。当A进程想进入临界区的时候执行down操作来做标记,把一般信号量和mutex(互斥锁)都down一遍,这个时候原创 2017-05-10 10:02:14 · 2873 阅读 · 0 评论 -
【进程&线程】调度 schedule
预备知识: 在并发体系中,I/O几乎是不消耗cpu资源的。当I/O完成之后会通过DMA(Direct Memory Access),通知cpu。这个时候cpu完成上下文切换,执行接下来的进程。 由于cpu的发展比磁盘的改进快很多,所以接下来的进程会越来越倾向于I/O密集型。 两种调度算法: 非抢占式算法 挑选一个进程并运行直至它IO阻塞或者自动让出cpu。这样就原创 2017-05-10 10:03:27 · 535 阅读 · 0 评论 -
socket知识点整理
在UNIX系统中,一切都是文件,一个int值代表着一个可以打开的文件,这个文件可以执行read()或者write()方法。原创 2017-08-24 15:28:22 · 845 阅读 · 0 评论 -
c++中的内存分配逻辑
理解自:http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/ 内存分配 一个程序在用的内存分为几个片段: - code segment 存放代码的地方,这部分是只读的 - bss segment 存放全局默认静态变量的地方 - data segment 全局变量和静态变量 - 堆 动态分配内存的片段 - c...原创 2018-07-17 14:43:12 · 256 阅读 · 0 评论