Win32 线程同步
Win32线程同步
1. 原子锁
2. 临界区
{全局变量}
CRITICAL_SECTION CS = {0}; // 定义并初始化临界区结构体变量
{线程执行函数中,在执行代码外面}
EnterCriticalSection(&CS);
{线程执行代码}
LeaveCriticalSection(&CS;
{然后让线程做其他事,避免线程饥饿竞争}
{主函数中执行}
InitializeCriticalSection(&CS);
/*创建线程*/
DeleteCriticalSection(&CS);
3. 互斥锁
- 初始化互斥锁句柄 —— HANDLE hMutex = 0;
- 创建互斥锁 —— CreateMutex();
- 在线程中执行代码之间加
WaitforSingleObject(hMutex,INFINTE);//过了堵塞,就会加上锁
//Run function of threading to do something!
ReleaseMutex(hMutex);// 解锁
4. 事件
- 声明并初始化事件句柄 HANDLE hEvent = 0;
- 创建事件 —— CreateEvent()
- 在线程代码中加入 WaitforSingleObject(hEvent,INFINTE)
- ReleaseEvent / SetEvent —— 设置时事件信号 //这里最好在做个释放事件后一定要给其他线程事件去获得运行的机会,否则会造成严重的线程饥饿问题
5. 信号量
- 创建信号量 —— CreateSemaphore()
- 释放信号量数 ReleaseSemaphore() //通过两个线程相互改变信号量作用就可以实现线程同步
补充:
- 进程与线程的区别:
- 进程: 进程的创建过程是给操作系统发送需求,并分配一部分计算机硬件资源,再是创建有且仅有唯一的主线程,这就是为什么我们也可通过进程对计算机运行调度的问题。
- 线程: 在进程获取资源里的中主线程上,把时间片分割成计算机能够承受执行调度的时间片(线程函数)