线程同步之关键段

    xiaoxiao2025-12-04  3

    From:http://blog.csdn.net/ilovethissite/article/details/8505606

    1.关键段共初始化化、销毁、进入和离开关键区域四个函数。

    初始化:void InitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

    销毁:void DeleteCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

    进入关键区域:void EnterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

    离开关关键区域void LeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

    2.关键段可以解决线程的互斥问题,但因为具有“线程所有权”,所以无法解决线程同步问题。

    3.推荐关键段与旋转锁配合使用。以下为旋转锁的一些函数介绍:

    函数功能:初始化关键段并设置旋转次数

    BOOLInitializeCriticalSectionAndSpinCount( LPCRITICAL_SECTIONlpCriticalSection,  DWORDdwSpinCount);

    函数说明:旋转次数一般设置为4000

     函数功能:修改关键段的旋转次数

    DWORDSetCriticalSectionSpinCount( LPCRITICAL_SECTIONlpCriticalSection,  DWORDdwSpinCount);

    《Windows核心编程》第五版的第八章推荐在使用关键段的时候同时使用旋转锁,这样有助于提高性能。值得注意的是如果主机只有一个处理器,那么设置旋转锁是无效的。无法进入关键区域的线程总会被系统将其切换到等待状态。

    转载请注明原文地址: https://ju.6miu.com/read-1304587.html
    最新回复(0)