和关键段不同的是区分读入者线程和写入者线程。读和写共用一个锁,后边的条件变量触发条件也是一个锁
占用锁的时间越少越好,如果被长时间占用,那么其他线程总是在被等待的状态,对程序性能有影响。
SRWLOCK结构体 包含于头文件 <Windows.h>
VOID InitializeSRWLock(PSRELOCK SRWLock); //锁的初始化,只需要初始化一次
写入者线程: VOID AcquireSRWLockExclusive(PSRELOCK SRWLock); //申请锁,开始写入
VOID ReleaseSRWLockExclusive(PSRELOCK SRWLock); //释放锁,写入完成后
读取者线程: VOID AcquireSRWLockShared(PSRELOCK SRWLock); //锁可以在不同时候不断申请、释放
VOID ReleaseSRWLockShared(PSRELOCK SRWLock);
Slim读写锁的性能大多时候优于关键段,而且Slim锁执行读操作的性能要优于写操作的性能,这是因为两个线程可以同时读取,而需要执行写操作的线程之间是互斥的。