一、互斥和同步
互斥,对于共享的系统资源,在各个线程访问时的排它性。任何时刻最多只允许一个线程去使用,其他要使用的线程必须等待,直到占用资源者释放该资源。
同步,协同步调,按预定的先后次序进行。同步也满足互斥的条件,并且多了执行顺序的要求。
临界区(Critical Section)、互斥对象(Mutex):主要用于互斥控制;都具有拥有权的控制方法,只有拥有该对象的线程才能执行任务,所以拥有,执行完任务后一定要释放该对象。
信号量(Semaphore)、事件对象(Event):事件对象是以通知的方式进行控制,主要用于同步控制。
二、线程同步的4种方式
2.1 临界区(CriticalSection)
临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
它并不是核心对象,不属于操作系统维护的,只能同一进程中线程使用,不能跨进程使用。
临界区一般使用锁的方式来实现,常见的互斥锁和读写锁:提供对临界资源的保护,当多线程试图访问临界资源时,都必须通过获取锁的方式来访问临界资源。(临界资源:是被多线程共享的资源)当读写线程获取锁的频率差别不大时,一般采用互斥锁,如果读线程访问临界资源的频率大于写线程,这个时候采用读写锁较为合适。
2.2 互斥量(Mutex)
互斥量多用于多进程之间的线程互斥,用来确保一个线程独占一个资源的访问。而且能正确处理资源遗弃的问题。
“遗弃”问题就是——占有某种资源的进程意外终止后,其它等待该资源的进程能否感知。而事件与信号量都无法处理遗弃问题。
互斥对象和临界区对象非常相似

最低0.47元/天 解锁文章
1220

被折叠的 条评论
为什么被折叠?



