1、Linux环境下的线程之间的协调与同步
一个程序如何才能同时完成多个任务?
- 使用fork和exec同时运行多个程序。
- 使用线程在同一个程序同时运行多个程序。
线程的同步机制:
- 隶属同一进程的各线程协调一致地工作的机制。
UNIX/Linux三种主要线程同步机制
- 互斥锁:提供了对共享资源的保护作用。
- 信号量:也称为信号灯,主要用于系统中有N个资源可用的情况, 是对互斥机制的一种推广。
- 条件变量:一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。
2、Windows环境下的线程之间的协调与同步
Windows下的四种主要线程同步机制:临界区(Critical Section)、互斥锁(Mutex)、信号量(Semaphore)、 事件(Event)。
临界区:在多线程程序中,有些代码是共享资源,需将这些代码作为临界区。如果有多个线程试图同时访问临界区,那么在一个线程进入后,其他线程被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占。
互斥锁:保证每一次只能有一个线程获得互斥锁二得以继续执行。
**信号量:**信号量允许多个线程在同一时刻访问统一资源,但是限制了在同一时刻访问共享资源的最大线程数。信号量是内核对象,允许跨进程使用。
**事件:**事件是内核对象,具有“激发状态”和“未激发状态”。事件主要分为两类:
-
人工重置事件:用程序手动设置。
-
自动重置事件:一旦事件发生并被处理后,自动恢复到没有时间状态。
————参考《TCP/IP网络编程基础教程》