• 多线程-临界区


    函数功能:初始化

    函数原型:

    void InitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

    函数说明:定义关键段变量后必须先初始化。

     

    函数功能:销毁

    函数原型:

    void DeleteCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

    函数说明:用完之后记得销毁。

     

    函数功能:进入关键区域

    函数原型:

    void EnterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

    函数说明:系统保证各线程互斥的进入关键区域。

     

    函数功能:离开关关键区域

    函数原型:

    void LeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

     

    输出将范文tickets设置为临界资源,由两个进程轮流访问

    #include<stdio.h>
    #include<process.h>
    #include<windows.h>
    int tickets=50;
    CRITICAL_SECTION g_cs;
    unsigned int __stdcall Fun1(VOID *lp)
    {	
    	while(true)
    	{
                    Sleep(1);//这个要在临界区外面,不然要了资源切换了线程导致浪费
    		EnterCriticalSection(&g_cs);
    	
    		if(tickets>0)
    		{
    			printf("thread1 %d
    ",tickets--);
    			LeaveCriticalSection(&g_cs);
    		}
    		else
    		{
    			LeaveCriticalSection(&g_cs);
    			break;
    		}
    	}
    	return 0;
    }
    unsigned int __stdcall Fun2(VOID *lp)
    {
    	while(true)
    	{
                    Sleep(1);
    		EnterCriticalSection(&g_cs);
    		if(tickets>0)
    		{
    			printf("thread2 %d
    ",tickets--);
    			LeaveCriticalSection(&g_cs);
    		}
    		else
    		{
    			LeaveCriticalSection(&g_cs);
    			break;
    		}
    	}
    	return 0;
    }
    int main()
    {
    InitializeCriticalSection(&g_cs);//初始化要在定义handle前面,不然调用了线程可能临界区并没有初始化
    HANDLE handle1,handle2;
    handle1=(HANDLE)_beginthreadex(NULL,0,Fun1,NULL,0,NULL);
    handle2=(HANDLE)_beginthreadex(NULL,0,Fun2,NULL,0,NULL);
    CloseHandle(handle1);
    CloseHandle(handle2);
    
    Sleep(4000);
    DeleteCriticalSection(&g_cs);
    return 0;
    }
    

      

  • 相关阅读:
    论文复现的一些问题
    南京锐士方达猎头可拉黑
    Functional Ruby
    国内访问 Atom 源很慢 & 解决方案
    Linux 的硬链接与软链接
    Python小知识点(持续更新)
    MySQL小知识点(持续更新)
    Iterable Object, Iterator, Generator, Generator Iterator
    setTimeout函数在浏览器中和Node.js中的区别
    Several Python Tools/Utilities
  • 原文地址:https://www.cnblogs.com/zsboy/p/3981205.html
Copyright © 2020-2023  润新知