zoukankan      html  css  js  c++  java
  • Win32 线程同步

    Win32 线程同步

    Win32线程同步

    1. 原子锁

    2. 临界区

    {全局变量}
    CRITICAL_SECTION CS = {0}; // 定义并初始化临界区结构体变量 
    {线程执行函数中,在执行代码外面}
     EnterCriticalSection(&CS);
     {线程执行代码}
     LeaveCriticalSection(&CS;
     {然后让线程做其他事,避免线程饥饿竞争}
     
     {主函数中执行}
      InitializeCriticalSection(&CS);
      /*创建线程*/
      DeleteCriticalSection(&CS);
      
    

    3. 互斥锁

    1. 初始化互斥锁句柄 —— HANDLE hMutex = 0;
    2. 创建互斥锁 —— CreateMutex();
    3. 在线程中执行代码之间加
    	WaitforSingleObject(hMutex,INFINTE);//过了堵塞,就会加上锁  
        //Run function of threading to do something!  
        ReleaseMutex(hMutex);// 解锁  
    

    4. 事件

    1. 声明并初始化事件句柄 HANDLE hEvent = 0;
    2. 创建事件 —— CreateEvent()
    3. 在线程代码中加入 WaitforSingleObject(hEvent,INFINTE)
    4. ReleaseEvent / SetEvent —— 设置时事件信号 //这里最好在做个释放事件后一定要给其他线程事件去获得运行的机会,否则会造成严重的线程饥饿问题

    5. 信号量

    1. 创建信号量 —— CreateSemaphore()
    2. 释放信号量数 ReleaseSemaphore() //通过两个线程相互改变信号量作用就可以实现线程同步

    补充:

    • 进程与线程的区别:
    • 进程 进程的创建过程是给操作系统发送需求,并分配一部分计算机硬件资源,再是创建有且仅有唯一的主线程,这就是为什么我们也可通过进程对计算机运行调度的问题。
    • 线程: 在进程获取资源里的中主线程上,把时间片分割成计算机能够承受执行调度的时间片(线程函数)
  • 相关阅读:
    第七次上机练习
    第六次作业
    第六次上机练习
    第五次作业
    第五次上机练习
    第四次作业
    第四次上机练习
    第三次上机练习
    第三次作业
    第十一周上机练习
  • 原文地址:https://www.cnblogs.com/Kernel001/p/8068276.html
Copyright © 2011-2022 走看看