Windows 临界区,内核事件,互斥量,信号量

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;
}

int _tmain(int argc, _TCHAR* argv[])
{
InitializeCriticalSection(
&g_cs);
thread_count 
= 4;
CreateThread(
00, thread_proc, 000);
CreateThread(
00, thread_proc, 000);
CreateThread(
00, thread_proc, 000);
CreateThread(
00, thread_proc, 000);
while (thread_count) 
Sleep(
0);
getchar();
DeleteCriticalSection(
&g_cs);
return 0;

内核事件:
适用范围:多用于线程间的通信,可以跨进程同步。
相关结构: HANDLE hEvent;
相关方法:
/*
初始化方法,创建一个事件对象,第一个参数表示安全属性,一般情况下,遇到这类型的参数直接给空就行了,第二个参数是否是人工重置。(内核时间有两种工作模式:人工重置和自动重置。其区别会在下面提到。)。第三个参数是初始状态,第四个参数事件名称。
*/
hEvent = CreateE
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值