1. 进程互斥
定义:
进程互斥是指多个进程在访问共享资源时,为了保证数据一致性和完整性,必须保证在同一时刻只有一个进程能访问该资源。
场景:
例如,多个进程需要对同一个文件进行写操作,如果不加以限制,可能会导致数据竞争和文件损坏。
实现方式:
常见的进程互斥实现方法包括:
信号量(Semaphore):
使用一个计数器表示资源的可用状态,通过P()和V()操作实现互斥访问。
互斥锁(Mutex):
通过加锁和解锁机制保证只有一个进程能访问临界区。
自旋锁(Spinlock):
通过不断检查锁的状态实现互斥,但会占用CPU资源,适用于短时间的临界区。
禁止中断:
在临界区中暂时关闭中断,但这种方法只适用于单处理器系统。
Peterson算法和Test-and-Set:
这是经典的互斥算法,通常在教学和理论中用来讲解进程互斥的基本原理。
2. 进程同步
定义:
进程同步是指多个进程在执行过程中,为了协调它们的执行顺序,确保它们按照某种规则进行操作,从而避免逻辑上的错误。
场景:
例如,生产者-消费者问题中,消费者不能消费未生产的数据,这需要同步来保证生产和消费的顺序。
实现方式:
信号量(Semaphore):
信号量不仅可以用于互斥,还可以通过设置信号量的初值来实现同步。例如,生产者将产品放入缓冲区后增加信号量,消费者只有在信号量大于0时才能消费。
条件变量(Condition Variable):
配合互斥锁使用,允许线程等待特定条件满足时被唤醒。
事件(Event):
在某些操作系统中,通过事件机制实现同步,一个进程可以等待另一个进程发出的事件。
管程(Monitor):
是一种更高级的同步机制,封装了共享资源及其操作,使得同步更加直观和易用。
消息传递:
进程之间通过消息队列、信号或管道等机制进行通信来实现同步。
1万+



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



