金沙官网线上:.net中lock的使用场景

 最近由于工作需要,开始写托管C++,由于C++11中的mutex,和future等类,托管C++不让调用(报错),所以自己实现了托管C++的线程锁。

       基本含义:  lock就是把一段代码定义为临界区,所谓临界区就是同一时刻只能有一个线程来操作临界区的代码,当一个线程位于代码的临界区时,另一个线程不能进入临界区,如果    试图进入临界区,则只能一直等待(即被阻止),直到已经进入临界区的线程访问完毕,并释放锁旗标

该类可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果其他线程尝试进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。

          基本使用方法:

 1 using namespace System;
 2 using namespace System::Threading;
 3 
 4 ref class Lock 
 5 {
 6 public:
 7     Lock(Object ^ pObject) 
 8         : m_pObject(pObject) 
 9     {
10         Monitor::Enter(m_pObject);
11     }
12 
13     ~Lock() 
14     {
15         Monitor::Exit(m_pObject);
16     }
17 
18 private:
19     Object ^ m_pObject;
20 };
  1. class Test  
  2. {  
  3.     //定义一个私有成员变量,用于Lock  
  4. 金沙官网线上,    private static object lockobj = new object();  
  5.     void DoSomething()  
  6.     {  
  7.         lock (lockobj)  
  8.         {  
  9.             //需要锁定的代码块  
  10.         }  
  11.     }  
  12. }  

注:原则上m_pObject是可以为任意类型,但是String是一个例外。

使用lock需要注意的地方:

本文由金沙官网线上发布于编程,转载请注明出处:金沙官网线上:.net中lock的使用场景

您可能还会对下面的文章感兴趣: