主线程与子线程之间要进行同步访问公共变量,子线程之间要互斥的访问公共变量。如下列出几种常用的同步互斥方法。
(1)关键段,criticalSection,可以用于线程间的互斥,不可以用于线程间同步,不能跨进程使用,有线程所有权,无需要处理“遗弃”问题。
(2)互斥量,mutex, 也可以解决互斥问题,不能解决同步问题,可以跨进程使用,拥有线程所有权,无需要处理“遗弃”问题。
(3)事件 , event, 可以解决同步问题也可以解决互斥问题,可以跨进程使用,没有线程所有权,不能处理“遗弃”问题。
(4)信号量,semaphore,用来处理主线程和子线程之间的同步问题,可以跨进程使用,不能处理“遗弃”问题。
同步 | 互斥 | 可否跨进程使用 | 能否处理“遗弃”问题 | |
关键段 | 不可以 | 可以 | 不能 | 可以 |
互斥量 | 不可以 | 可以 | 可以 | 可以 |
事件 | 可以 | 可以 | 可以 | 不可以 |
信号量 | 可以 | ? | 可以 | 不可以 |