必须先知道的概念,
操作系统可以使多个任务并行执行,这被称为多线程的调度运行,简单地,虽然CPU只有一个程序运行指针,但是这个指针会按照操作系统分配的多个时间片,分别去取每个任务代码运行,任意时刻是一个线程在运行,但是总体上看像是多任务并行运行。
一个线程有4中状态:就绪,等待操作系统能有时间片分给它使用,就是Thread.start()之后;运行,CPU指针在该线程中运行,进入线程的响应函数中run();阻塞,当前没有办法在该线程中运行,比如Sleep(), 同步锁等;死亡,线程的响应任务执行完毕。
互斥量Mutex,就是进行线程间通信的一种手段,可以挂起线程,使线程阻塞。
为什么要挂起线程呢,主要是因为要独占资源,只能由当前获取了互斥量的线程访问,其他线程如果要访问同样的资源,需要使用互斥量加以控制。
1. 引用头文件<windows.h>
2. 创建Mutex,可以创建一个有名字的mutex,或者没有名字的mutex
HANDLE CreateMutexA(
LPSECURITY_ATTRIBUTES lpMutexAttributes, //互斥体的一些属性,为NULL时,只在当前类使用
BOOL bInitialOwner, // true,有拥有者,false,没有拥有者
LPCSTR lpName //互斥体的名字
);
3. 等待获取Mutex,INFINITE, 只有在获取到互斥体时返回WAIT_OBJECT_0,也就是阻塞线程
if (WaitForSingleObject(mutex, INFINITE) != WAIT_OBJECT_0)
4.释放Mutex,释放Mutex的权限,就是解锁。
ReleaseMutex(mutex)
5. 终止一个Mutex,不要了
CloseHandle((HANDLE)*mutex)