slim 读写锁

分配一个SRWLOCK 结构并初始化

SRWLOCK srwLock;
VOID InitializeSRWLock(&srwLock);

写入者线程独占锁

获得独占访问权:
VOID AcquireSRWLockExclusive(&srwLock);
解除对资源的锁定:
VOID ReleaseSRWLockExclusive(&srwLock);

读取者共享

获取访问权限(非独占)
VOID AcquireSRWLockShared(&srwLock);
解除锁定
VOID ReleaseSRWLockShared(&srwLock);

-如果在锁被占用的时候,调用AcquireSRWLock*的时候会阻塞(调用线程
)。
-不能递归地获得SRWLOCK。

*具体代码和关键段类似。

SRWLOCK srwLock;
int dwData = 0;
unsigned __stdcall ThreadFuncRead(void* pIndex)
{
    unsigned temp = (unsigned)pIndex;
    int a = 0;
    while(1)
    {
        a++;
        AcquireSRWLockShared(&srwLock);
        printf("[%d]thread %d read:%d\n",a,temp,dwData);
        Sleep(1000);
        ReleaseSRWLockShared(&srwLock);
    }
    return 1;
}
unsigned __stdcall ThreadFuncWrite(void*)
{
    while (1)
    {
        AcquireSRWLockExclusive(&srwLock);
        dwData++;
        printf("Write %d\n",dwData);
        Sleep(800);
        ReleaseSRWLockExclusive(&srwLock);
    }
    return 1;
}
BOOL OnActive()
{
    InitializeSRWLock(&srwLock);

    int i=0;
    HANDLE hThreadRead[3];
    HANDLE hThreadWrite;
    unsigned uiThreadReadID[3]; 
    unsigned uiThreadWriteID;

    hThreadWrite = (HANDLE)_beginthreadex(NULL,0,ThreadFuncWrite,0,CREATE_SUSPENDED,&uiThreadWriteID);

    for (i=0;i<3;i++)
    {
        hThreadRead[i] = (HANDLE)_beginthreadex(NULL,0,ThreadFuncRead,(void*)i,CREATE_SUSPENDED,&(uiThreadReadID[i]));
    }

    ResumeThread(hThreadWrite);
    ResumeThread(hThreadRead[0]);
    ResumeThread(hThreadRead[1]);
    ResumeThread(hThreadRead[2]);

    Sleep(5000);

    CloseHandle(hThreadWrite);
    CloseHandle(hThreadRead[0]);
    CloseHandle(hThreadRead[1]);
    CloseHandle(hThreadRead[2]);

    return TRUE;
}

你可能感兴趣的:(slim 读写锁)