Windows 临界区,内核事件,互斥量,信号量。
临界区,内核事件,互斥量,信号量,都能完成线程的同步,在这里把他们各自的函数调用,
结构定义,以及适用情况做一个总结。
临界区:
适用范围:它只能同步一个进程中的线程,不能跨进程同步。一般用它来做单个进程内的代码
快同步,效率比较高。
相关结构:CRITICAL_SECTION _critical
相关方法:
/*初始化,最先调用的函数。没什么好说的,一般 windows 编程都有类似初始化的方法*/
InitializeCriticalSection(& _critical)
/*释放资源,确定不使用_critical 时调用,一般在程序退出的时候调用。如果以后还要用
_critical,则要重新调用 InitializeCriticalSection*/
DeleteCriticalSection(& _critical)
/*把代码保护起来。调用此函数后,他以后的资源其他线程就不能访问了。*/
EnterCriticalSection(& _critical)
/*离开临界区,表示其他线程能够进来了。注意 EnterCritical 和 LeaveCrticalSection 必须
是成对出现的!当然除非你是想故意死锁!*/
LeaveCriticalSection(& _critical)
代码 Demo
#include "stdafx.h"
int thread_count = 0;
/*Mutex mutex1;*/
CRITICAL_SECTION g_cs;
DWORD CALLBACK thread_proc(LPVOID params)
{
for(int i = 0; i < 10; ++i)
{
//synchronized(mutex1)
EnterCriticalSection(&g_cs);
{
for(char c = 'A'; c <= 'Z'; ++c)
{
printf("%c",c);
}
printf("\n");
}
LeaveCriticalSection(&g_cs);
}
thread_count--;
return 0;
}
评论1