windows多线程同步机制---临界区
2016-02-16 21:33
447 查看
临界区
临界区作用
线程在执行代码时,将代码锁定,不允许其他线程执行,只有该线程离开后, 其他线程才能使用这些代码临界区的使用
2.1 初始化临界区
VOID InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection
//临界区结构地址
);
2.2 临界区加锁
VOID EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection // pointer to critical
//临界区
);
2.3 临界区解锁
VOID LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection
// 临界区
);
2.4 释放临界区
VOID DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection
//临界区
);
3 和原子锁相比
原子锁是一条语句 临界区可以完成多条语句的锁定.// CriticalSection.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "conio.h"
#include "windows.h"
CRITICAL_SECTION g_cs = { 0 };
LONG nValue = 0;
void Print( )
{ //进入临界区 - 加锁
EnterCriticalSection( &g_cs );
printf( "Long long long.......\n" );
nValue++;
//离开临界区 - 解锁
LeaveCriticalSection( &g_cs );
}
DWORD WINAPI PrintProc( LPVOID pParam )
{
while( 1 )
{
Print( );
Sleep( 100 );
}
return 0;
}
void Create( )
{
DWORD nThreadID = 0;
HANDLE hThread[2] = { 0 };
hThread[0] = CreateThread( NULL, 0,
PrintProc, NULL, 0, &nThreadID );
hThread[1] = CreateThread( NULL, 0,
PrintProc, NULL, 0, &nThreadID );
getch( );
}
int main(int argc, char* argv[])
{ //初始化临界区
InitializeCriticalSection( &g_cs );
Create( );
//删除临界区
DeleteCriticalSection( &g_cs );
return 0;
}
相关文章推荐
- Python多线程同步Lock、RLock、Semaphore、Event实例
- 五种Java多线程同步的方法
- 基于Java回顾之多线程同步的使用详解
- Java 多线程同步 锁机制与synchronized深入解析
- iOS开发多线程同步
- 《Win32多线程程序设计》(3)---同步控制
- 《Win32多线程程序设计》(4)--- 互斥器(Mutexes)
- 《Win32多线程程序设计》(5)---信号量(Semaphores)
- 《Win32多线程程序设计》(6)---事件(Event Objects)
- 《Win32多线程程序设计》(8)---Interlocked Variables
- 《Win32多线程程序设计》(9)---同步机制摘要
- 多线程同步之关键代码段(临界区)
- pthread学习笔记
- 关于同步锁的一个问题
- 多线程同步说明
- 第26课 如何设置绘图 以及 多线程的应用
- 走进windows编程的世界-----windows线程
- Windbg跟踪临界区的BUG
- 线程同步-临界区对象
- 大话设计模式C++实现-第21章-单例模式