进程线程之间的通信共享数据在现实的应用中可以说是不可避免的,那么如何保证他们之间在使用同一个数据的时候能够有序,不出问题,这个就是同步机制要解决的问题,老师经常说程序设计到最后有很多哲学的问题,仔细想来也确实可以这么说,哈哈,其实哲学就是事物的道理吗,我们都多多少少是跟哲学沾边的。
同步的机制主要有四种:临界区,互斥量,信号量和事件,下面分述之,首先说明,这些内容有些是网上看到别人的资料,有些是自己的总结,主要是自己留存备用
1. 临界区:Critical Section
用于线程间同步,多个线程同时访问一个资源时,首先进入这个临界区的获取使用权,其它排队,知道当前使用的线程释放临界区
2. 互斥量:Mutex
可以用于进程和线程间同步,功能与临界区类似
3. 信号量:Semaphores
可用于进程和线程间同步,它与临界区与互斥量的不同在于可以对资源的控制不是独享,而是可以同时使用的,它控制的是数目。
就像经典的生产者消费者模型
生产者在放货前需要知道还有多少个货物能往里放。
消费者在拿货前需要知道有多少个货物能往外拿。
生产者往里放货的时候要更新可以放货的数量以及可以拿货的数量。
消费者拿货的时候也要更新这两个数量。
4. 事件:Event
事件是用来在进程和线程间同步的。就像我们人之间的交流。我把一件事做完了,告诉别人,别人收到这个消息才能接着往下做。或者他还要等第三个人把事情做完才能开 始做他的事。
互斥量、信号量、事件用于进程间同步的功能还需要写程序验证一下。
信号量的使用还需要练习。