有关多线程临界区的几个疑问:
在使用关键区域或者临界区域的时候1。 如果想成为临界对象,是不是只要在该对像后 定义CCriticalSection CriticalSection,这样该对象即成为临界对象 如:int iArray[10];
CCriticalSection CriticalSection;
那么iArray[10]这个数组变成临界对象。
那么如果这样 int iArray1[10];
            int iArray2[10];
   CCriticalSection CriticalSection;
那么iArray1[10]和iArray2[10], 是不是都是临界对象。
         还是只有iArray2[10]是临界对象。
                 
2.  当线程1进入临界区后,即CriticalSection.Lock()或者EnterCriticalSection(..),   而线程2也想进入临界区, 那么这时线程2等待, 是不是CriticalSection.Lock()或者EnterCriticalSection(..)这两个函数完成等待这种动作????

解决方案 »

  1.   

    1 不是这样的,没有一个资源是能自动做到访问控制的。你可以为你的资源设计一个类,在访问资源的接口之中运用临界区,来保证访问互斥。2 你的说法不正确,这个线程挂起的动作是系统完成的。你知道,临界区是一个内核对象,线程的挂起,实际上是系统进行控制的,实际上这个线程是从用户模式转换为内核模式了。建议你学习一下《Windows核心编程》相关章节
      

  2.   

    不是这样的,临界区的意思是这样的:CriticalSection锁定之后,这下面的一段代码是临界区,就是在这段时间内,只能由一个线程访问,系统挂起其它需要用这个区域代码(数据)的线程直到CriticalSection解锁。
      

  3.   

    to :fzd999(花差花差) ( ) 1 不是这样的,没有一个资源是能自动做到访问控制的。你可以为你的资源设计一个类,在访问资源的接口之中运用临界区,来保证访问互斥。不是很明白阿