操作系统
Coding_Fly_
满招损,谦得益
展开
-
信号量与互斥量
进程间需要进行通信,通信的过程中就会产生很多关系,经典的关系就是生产者消费者模型。生产者消费者模型:两个进程共享共享一块公共的固定大小的缓冲区,其中一个是生产者,将信息放入缓冲区;另一个是消费者,用来从缓冲区中读取信息。生产者不断进行生产,如果缓冲区满,生产者进行睡眠,唤醒消费者,否则生产者持续向缓冲区放入数据。消费者从缓冲区拿出数据,如果缓冲区为空的时候,消费者进行休眠,此时唤醒生产者。这只是理想化模型,如果发给一个未睡眠进程的wakeup信号丢失了,就会导致生产者消费者都会进入休眠状态。于是就产原创 2020-07-06 18:47:24 · 1193 阅读 · 0 评论 -
将单线程代码多线程化遇到问题
1:对线程而言是全局变量,并不是对整个程序也是全局的;解决方案:a:全面禁用全局变量;b:为每个线程赋予私有全局变量2:很多库过程是不可重入的解决方案:为每个过程提供包装器,改包装器设置一个二进制位从标志某个库处于使用中。在调用没有完成之前任何使用该库的线程都会被阻塞。(该方案会极大降低系统潜在的并行性)3:信号有的是线程专用的,但是有的不是。4:堆栈管理,当一个进程堆栈溢出时,内核只是自动为改进程提供更多的堆栈,当一个进程为多个进程时,必须有多个堆栈。内核如果不了解所有的堆栈,就不能使其自动原创 2020-06-25 22:59:24 · 196 阅读 · 0 评论 -
怎样避免竞争条件?
进程间通信主要研究以下几个问题:(1):进程如何把信息传递给另一个(2):在多个进程的活动中不会出现交叉(3):进程执行顺序正确性1:竞争条件,两个或多个进程读写某些共享数据,最后结果取决于进程运行的精确时序,称为竞争条件,包含竞争条件的程序会在极少数情况下出现错误。怎样避免竞争条件?避免竞争现象,实际上就是找到某种途径阻止多个进程同时读写共享的数据,(即互斥);互斥就是以某种手段来确保一个进程在使用一个共享变量文件或文件时,其他进程不能做同样的操作。好的解决竞争条件的方案:我们把对共享内原创 2020-06-23 15:39:57 · 995 阅读 · 0 评论