轻型读写锁 Slim Reader/Writer (SRW) Locks

轻型读写锁 Slim Reader/Writer (SRW) Locks

轻型读写锁能够使单一进程的线程们访问共享资源;轻型读写锁速度优化和占据非常少的内存。轻型读写锁不能跨线程共享;

读取线程从共享资源读取数据而写入线程写数据到共享资源。当多线程正在使用共享资源进行读写时,如果这个读取线程持续运行但是写操作却几乎不运行,互斥锁(比如,临界区或者互斥锁)存在性能问题。

轻型读写锁提供多线程访问共享资源的两个模式:

  • 共享模式  该模式授权多个读取线程共享只读权限,使它们能够从当前共享的资源中并发读取数据。如果读取操作多于写操作,与临界区相比,这种并发提高了性能和吞吐量。
  • 互斥模式  该模式一次授权给一个写入线程读/写权限。当这个锁在互斥模式被获取时,没有其他线程能够访问这个共享资源直到这个写入线程释放这个锁。

  注意:互斥模式请读写锁不能被递归请求。如果一个线程已经拥有读写锁,再尝试获取读写锁时,这种尝试将失败或者死锁。

在任意一个模式下均可获取一个轻型读写锁:在共享模式下读取线程能够获取锁而写入线程能在互斥模式下获取锁。无法保证请求所有权的线程被授予所有权的顺序。轻型读写锁既不公平也不是先进先出(FIFO)。

一个轻型读写锁只有指针的大小。优点是,它能快速更新锁的状态。缺点是,只有非常少的状态信息被存储, 所以轻型读写锁不能被递归获取。此外,一个拥有共享模式轻型读写锁的线程不能升级它的锁的所有权到互斥模式。

这个调用者必须分配一个SRWLOCK结构体内存并初始化它,通过调用 InitializeSRWLock(动态初始化结构体)或者赋值给这个结构体变量SRWLOCK_INIT常量(静态初始化结构体)。

 

 
轻型读写锁函数Description
AcquireSRWLockExclusive 获取互斥模式轻型读写锁。
AcquireSRWLockShared 获取共享模式轻型读写锁。
InitializeSRWLock 初始化轻型读写锁。
ReleaseSRWLockExclusive 释放互斥模式轻型读写锁
ReleaseSRWLockShared 释放共享模式轻型读写锁
SleepConditionVariableSRW 在指定的条件变量上休眠,并以原子操作的形式释放指定的锁。
TryAcquireSRWLockExclusive Attempts to acquire a slim reader/writer (SRW) lock in exclusive mode. If the call is successful, the calling thread takes ownership of the lock.
TryAcquireSRWLockShared Attempts to acquire a slim reader/writer (SRW) lock in shared mode. If the call is successful, the calling thread takes ownership of the lock.

 

英文链接:

https://docs.microsoft.com/en-us/windows/win32/sync/slim-reader-writer--srw--locks

posted @ 2020-04-28 18:01  余生以学  阅读(630)  评论(0编辑  收藏  举报