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

    补充:

    • 进程与线程的区别:
    • 进程 进程的创建过程是给操作系统发送需求,并分配一部分计算机硬件资源,再是创建有且仅有唯一的主线程,这就是为什么我们也可通过进程对计算机运行调度的问题。
    • 线程: 在进程获取资源里的中主线程上,把时间片分割成计算机能够承受执行调度的时间片(线程函数)
  • 相关阅读:
    DokuWiki用storage的模式在sae上部署后速度太慢
    让禅道也可以玩BearyChat
    探讨c#中的unchecked是什么意思,起什么作用?
    重温Java的类加载机制
    JVM原理和优化
    为什么使用Redis
    高性能Web服务器Nginx及相关新技术的应用实践-张宴
    潘加宇--领域驱动设计和利润
    程序员跳槽全攻略
    EA强大的画图工具---设计数据库表格
  • 原文地址:https://www.cnblogs.com/Kernel001/p/8068276.html
Copyright © 2011-2022 走看看