关键节(Critical Seciton)与mutex的功能类似,但它只能由同一进程中的线程使用。关键节可以防止共享资源被同时访问。  进程负责为关键节分配内存空间,关键节实际上是一个CRITICAL_SECTION型的变量,它一次只能被一个线程拥有。在线程使用关键节之前,必须调用InitializeCriticalSection函数将其初始化。如果线程中有一段关键的代码不希望被别的线程中断,那么可以调用EnterCriticalSection函数来申请关键节的所有权,在运行完关键代码后再用LeaveCriticalSection函数来释放所有权。如果在调用EnterCriticalSection时关键节对象已被另一个线程拥有,那么该函数将无限期等待所有权。

解决方案 »

  1.   

    <<关键节可以防止共享资源被同时访问我还是不懂,什么时候指定哪些资源是共享资源了?<<如果线程中有一段关键的代码不希望被别的线程中断难道一个线程还能独占CPU不成?
      

  2.   

    别的线程处于等待状态(等在EnterCriticalSection上)
      

  3.   

    同意楼上的,在CriticalSection中间的所有变量认为是共享资源,当然必须自己指定才行啊。只能说你这个进程的某一进入CriticalSection的线程将参加系统的统一调度而已。
      

  4.   

    这个问题很有趣,打个比方:将线程比作国家,CriticalSection比作环境公约,
    保护的东东比作环境。那么,只有大家一起遵循该公约,才能够达到保护环境资源的目的。如果有其他不遵循公约的国家硬是要破坏环境,那么这个公约就失效了。
      

  5.   

    是不是关键节内要访问的资源一律独占?EnterCriticalSection();a++;
    b++;
    c++;
      
    LeaveCriticalSection();那么a,b,c就不能被其它线程访问了?