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

    补充:

    • 进程与线程的区别:
    • 进程 进程的创建过程是给操作系统发送需求,并分配一部分计算机硬件资源,再是创建有且仅有唯一的主线程,这就是为什么我们也可通过进程对计算机运行调度的问题。
    • 线程: 在进程获取资源里的中主线程上,把时间片分割成计算机能够承受执行调度的时间片(线程函数)
  • 相关阅读:
    SQLServer 高可用、高性能和高保护延伸
    SQLServer 通过DMV实现低影响的自动监控和历史场景追溯
    查找表包含的页和页所在的表
    出身在二三线城市软件工作者的悲哀
    SQL语句实现取消自增列属性
    基于Apache(without ssl)的svn环境搭建
    sqlite3 命令行操作
    HTML常用特殊符号集
    IOS项目目录结构和开发流程
    Mac OSX 快捷键&命令行
  • 原文地址:https://www.cnblogs.com/Kernel001/p/8068276.html
Copyright © 2011-2022 走看看