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() //通过两个线程相互改变信号量作用就可以实现线程同步

    补充:

    • 进程与线程的区别:
    • 进程 进程的创建过程是给操作系统发送需求,并分配一部分计算机硬件资源,再是创建有且仅有唯一的主线程,这就是为什么我们也可通过进程对计算机运行调度的问题。
    • 线程: 在进程获取资源里的中主线程上,把时间片分割成计算机能够承受执行调度的时间片(线程函数)
  • 相关阅读:
    DEBIAN下中文显示
    SpringMVC整合Quartz实现定时任务以及Tomcat服务执行初始化定时任务
    SpringMVC 配置定时执行任务
    Mybatis update In
    mybatis在xml文件中处理大于号小于号的方法
    解决Cannot change version of project facet Dynamic web module to 2.5
    android 圆角边框及图片
    Android MotionEvent事件响应机制
    android:configChanges属性
    Android之ScrollView嵌套ListView
  • 原文地址:https://www.cnblogs.com/Kernel001/p/8068276.html
Copyright © 2011-2022 走看看