5.24 note
条件变量 实现 互斥的同步
关于线程同步和互斥。及实现方式:
线程同步
线程同步是指多个线程在执行时,按照一定的顺序或规则来访问共享资源,以确保操作的正确性和数据的一致性。比如,多个线程都要访问一个银行账户,如果没有同步机制,可能会出现数据混乱的情况。通过线程同步,可以让线程一个一个地按顺序访问账户,保证账户余额的变化是正确的。
线程互斥
线程互斥是一种特殊的同步机制,它保证在同一时刻,只有一个线程能够访问特定的共享资源。就像一个厕所,同一时间只能有一个人使用,其他人需要等待。线程互斥就是为了避免多个线程同时访问共享资源而导致数据错误或程序出现异常。
实现方式
• 互斥锁:这是最常用的实现线程互斥的方法。当一个线程要访问共享资源时,它会先尝试获取互斥锁。如果锁可用,线程就可以获取锁并访问资源,同时其他线程就只能等待。当线程访问完资源后,会释放锁,让其他线程有机会获取锁并访问资源。
• 信号量:信号量可以用来控制同时访问共享资源的线程数量。它有一个初始值,表示可以同时访问资源的线程数。线程在访问资源前需要获取信号量,如果信号量的值大于0,线程可以获取信号量并访问资源,同时信号量的值减1。当线程访问完资源后,会释放信号量,让信号量的值加1。如果信号量的值为0,线程就需要等待,直到有其他线程释放信号量。
• 条件变量:条件变量通常与互斥锁一起使用,用于在线程之间进行通信。当一个线程需要等待某个条件满足时,它会释放互斥锁并在条件变量上等待。另一个线程在满足条件后,会通知条件变量,唤醒等待的线程。等待的线程被唤醒后,会重新获取互斥锁,然后继续执行。
以上是线程同步和互斥的基本概念及常见实现方式,不同的编程语言和操作系统提供了不同的具体实现方法和API。