zoukankan      html  css  js  c++  java
  • windows CRITICAL_SECTION 线程锁

    简单说,当一个线程执行了EnterCritialSection之后,cs里面的信息便被修改了,以指明哪一个线程占用了它。而此时,并没有任何资源被“锁定”。不管什么资源,其它线程都还是可以访问的(当然,执行的结果可能是错误的)。只不过,在这个线程尚未执行LeaveCriticalSection之前,其它线程碰到EnterCritialSection语句的话,就会处于等待状态,相当于线程被挂起了。 这种情况下,就起到了保护共享资源的作用。 
          也正由于CRITICAL_SECTION是这样发挥作用的,所以,必须把每一个线程中访问共享资源的语句都放在EnterCritialSection和LeaveCriticalSection之间。这是初学者很容易忽略的地方。 

    #include <windows.h>
    
    class CTLock
    {
    public:
      CTLock();
      ~CTLock();
    
      CRITICAL_SECTION m_cs; //  临界区
    
      inline void Lock()
      {
          EnterCriticalSection(&m_cs);
      }
    
      inline void Unlock()
      {
         LeaveCriticalSection(&m_cs);
      }
        
    };
    
    CTLock::CTLock()
    {
      InitializeCriticalSection(&m_cs);
    }
    
    CTLock::~CTLock()
    {
      DeleteCriticalSection(&m_cs);
    }
  • 相关阅读:
    Django部署在CENTOS7上
    慕课DJANGO配置
    响应式布局组件介绍
    SYN泛洪攻击原理及防御
    Token,session,cookie
    -webkit-
    JS中dataTransfer对象在拖曳操作中的妙用。
    深入理解DOM节点类型第一篇——12种DOM节点类型概述
    js如何打印object对象
    cookie(2)
  • 原文地址:https://www.cnblogs.com/sylar-liang/p/4268916.html
Copyright © 2011-2022 走看看