进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
来源:互联网 发布:js获取指定网页内容 编辑:程序博客网 时间:2024/06/05 03:01
进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)--转载
转自http://blog.sina.com.cn/s/blog_5eb8ebcb0100pzqu.html
今天学习TCP预先派生子经常服务程序时遇到了文件锁和互斥锁,初接触,不是很明白,特此从网上找了一下资料,看这篇文章说的比较明白,拿来借鉴。
为了能够有效的控制多个进程之间的沟通过程,保证沟通过程的有序和和谐,OS必须提供一定的同步机制保证进程之间不会自说自话而是有效的协同工作。比如在共享内存的通信方式中,两个或者多个进程都要对共享的内存进行数据写入,那么怎么才能保证一个进程在写入的过程中不被其它的进程打断,保证数据的完整性呢?又怎么保证读取进程在读取数据的过程中数据不会变动,保证读取出的数据是完整有效的呢?
3.
7.// unlock x
记录锁(文件锁)
为了增加并行性,我们可以在读写锁的基础上进一步细分被锁对象的粒度。比如一个文件中,读进程可能需要读取该文件的前1k个字节,写进程需要写该文件的最后1k个字节。我们可以对前1k个字节上读锁,对最后1k个自己上写锁,这样两个进程就可并发工作了。记录锁中的所谓“记录”其实是“内容”的概念。使用读写锁可以锁定一部分,而不是整个文件。
文件锁可以认为是记录锁的一个特例,当使用记录锁锁定文件的所有内容时,此时的记录锁就可以称为文件锁了。
信号灯
信号灯可以说是条件变量的升级版。条件变量相当于铃铛,铃铛响后每个挂起的进程还需要自己获得互斥锁并判断所需条件是否满足,信号灯把这两步操作糅合到一起。
在Posix.1基本原理一文声称,有了互斥锁和条件变量还提供信号灯的原因是:“本标准提供信号灯的而主要目的是提供一种进程间同步的方式;这些进程可能共享也可能不共享内存区。互斥锁和条件变量是作为线程间的同步机制说明的;这些线程总是共享(某个)内存区。这两者都是已广泛使用了多年的同步方式。每组原语都特别适合于特定的问题”。尽管信号灯的意图在于进程间同步,互斥锁和条件变量的意图在于线程间同步,但是信号灯也可用于线程间,互斥锁和条件变量也可用于进程见。应当根据实际的情况进行决定。
信号灯最有用的场景是用以指明可用资源的数量。比如含有10个元素的数组,我们可以创建一个信号灯,初始值为0.每当有进程需要读数组中元素时(假设每次仅能读取1个元素),就申请使用该信号灯(信号灯的值减1),当有进程需要写元素时,就申请挂出该信号等(信号灯值加1)。这样信号灯起到了可用资源数量的作用。如果我们限定信号灯的值只能取0和1,就和互斥锁的含义很相同了。
- 进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
- 进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
- 【转】 进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
- 进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
- 进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
- 进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
- 进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
- 进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
- 互斥锁、条件变量、读写锁、文件锁、信号灯
- 15章 进程间通信之同步(互斥锁、条件变量、读写锁、信号量)
- 互斥锁,条件变量,读写锁,信号灯,共享内存的一些代码
- 笔记:进程间通信——同步(互斥锁、读写锁、条件变量、信号量)以及Linux中的RCU
- 进程间的通信---信号灯
- 互斥锁 条件变量 信号灯
- UNP(卷2:进程间通信)—— 第7、8、9章:互斥锁、条件变量、读写锁、记录上锁
- linux——线程同步(互斥量、条件变量、信号灯、文件锁)
- 互斥锁 条件变量 读写锁
- Linux 进程间通信 - 信号灯(Semaphores)
- 使用javaFX编辑的学生管理系统
- 在web工程中使用spring(web.xml)
- 第四次上机实验
- Block
- 博客开通,记一下自己的用户名由来
- 进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
- javascript实现jsonp跨域访问
- leetcode-234. Palindrome Linked List
- CodeForces - 237C Primes on Interval (素数打表&二分)
- hdu 2181 哈密顿绕行世界问题 (dfs)
- JavaScrip随机生成五十位学生加学号
- ffmpeg 将图片序列合成为一段视频
- Struts2基础知识(三)
- apache+tomcat集群配置