博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows多线程同步机制---临界区
阅读量:3984 次
发布时间:2019-05-24

本文共 1248 字,大约阅读时间需要 4 分钟。

 临界区

  

  临界区作用

    线程在执行代码时,将代码锁定,不允许其他线程执行,只有该线程离开后, 其他线程才能使用这些代码

 临界区的使用

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

转载地址:http://awxui.baihongyu.com/

你可能感兴趣的文章
两个队列实现一个栈
查看>>
用两个栈实现一个带getMin()方法的新型栈
查看>>
头条搜索部门后台开发实习生面经
查看>>
java 线程池
查看>>
设计模式之单例模式
查看>>
自己写的String类能够被加载吗?
查看>>
java让主线程等待所有子线程执行完应该怎么做
查看>>
如此调用
查看>>
计算机的发展史
查看>>
二叉树两个节点最近公共祖先的解法
查看>>
三个线程轮流打印0到10
查看>>
RocketMQ 编译 不再支持源选项6
查看>>
Cpu、核、Java Runtime.getRuntime().availableProcessors()
查看>>
阶乘的对某个质因子P的分解
查看>>
字符串匹配问题,返回第一个匹配的下标 ,运用了KMP算法
查看>>
逆序单链表 时间复杂度O(n)
查看>>
创建二叉树、递归/非递归 先序/中序/后序遍历二叉树算法
查看>>
未排序数组中累加为给定值的最长子数组问题。
查看>>
软件工程
查看>>
归并排序
查看>>