
1.Interlocked系列功能: 由CPU实现windows 线程同步,例如InterlockedAdd是通过xadd指令锁定来实现同步
2,关键部分(CRITICAL_SECTION),使用事件内核对象:
InitializeCriticalSection(&g_cs)使用临界区来初始化临界区. 不再使用DeleteCriticalSection时,请使用它. 如果有两个资源A,B,三个线程1、2、3,如果12个线程访问A资源,而13个线程访问B资源,则必须创建两个关键部分,并在1个线程中两次调用EntryCriticalSection
3,如果一个线程已经在访问资源,则另一个线程将在调用EntryCriticalSection之后使用事件内核对象将调用进程切换到等待状态. 如果很长时间没有返回,则EntryCriticalSection将超时并引发异常,另一个函数将不让线程进入等待状态,而是返回TRUE和FASLE以确定释放的资源已被占用.

4,SpanishLock(旋转锁),旋转是通过while循环检查数量是否被占用,这个时间比进入内核设置内核事件要短,因此您可以在多处理器上旋转锁和关键部分一起使用,在初始化期间调用InitializeCriticalSectionAndSpainCount
5,修身锁(SRWLock):

在读取或写入资源时使用. 在只读模式下,多个线程可以同时读取. 在只写模式下,只有一个线程可以写. 您必须先声明一个windows 线程同步,然后再使用它. SRWLOCK结构用于只读资源的前面,而ReleaseSRWLockShared用于结尾. 这不需要释放,系统将自动清理. 对于只写资源,请在发布时使用ReleaseSRWLockExclusive进行发布.
6,volatile不需要同步.

7,性能通常是: volatile>互锁> SRWLock> = CriticalSection> Mutext和其他内核事件
8,条件变量: 一个用于关键部分,一个用于SRWLock,对应于或WakeAllConditionVarible
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-146870-1.html
茜
一切有教养的民族