首页 > 编程语言 > 详细

windows版本的线程锁

时间:2015-02-03 00:26:52      阅读:399      评论:0      收藏:0      [点我收藏+]

简单说,当一个线程执行了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);
}

 

windows版本的线程锁

原文:http://www.cnblogs.com/sylar-liang/p/4268916.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!