线程同步二:关键段

    技术2025-12-04  3

    1、先定义一个所有线程可见的CRITIACL_SECTION结构变量;

     

     

    2、在试图访问被保护资源的所有线程初始化上述CRITIACL_SECTION结构变量;

     

     

         void InitializeCriticalSection(CRITIACL_SECTION *);

     

     

    3、在对被保护资源访问前,调用:

     

     

         void EnterCriticalSection(CRITIACL_SECTION *);

     

     

    4、访问被保护资源结束后,调用:

     

     

         void LeaveCriticalSection(CRITIACL_SECTION *);

     

     

    5、当所有线程不需要访问被保护资源时,清理CRITIACL_SECTION结构变量;

     

     

         void DeleteCriticalSection(CRITIACL_SECTION *);

     

     

    注:在第3步也可以调用:

     

     

         bool TryEnterCriticalSection(CRITIACL_SECTION *);该函数会立即返回;如果返回false表示资源被其它线程访问,该线程

     

     

    不能立即访问被保护资源,但线程不会等待被保护资源,会继续执行后续代码;而EnterCriticalSection若得不到访问权限,会继续等待直

     

     

    到得到访问权限或超时;

    最新回复(0)