非主流时期的歌曲:Windows核心编程(第五版)笔记 第八章 用户模式下的线程同步(Thread Sync...

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 02:34:19
Windows核心编程(第五版)笔记 第八章 用户模式下的线程同步(Thread Synchronization with Kernel Objects)

第八章 用户模式下线程同步

 

              以下线程同步方法仅限于同一进程内的不同线程。不适用于不同进程的不线程。

1.原子访问 Atomic Access 

              InterlockedExchange系列函数是针对于某个单一变量进行的原子操作         

              Volatile关键字告诉编译器不要对变量的访问做任何优化,每次读访变量的值都要去内存中读而不是在寄存器中读。         

2.临界区 使一组操作原子化。

              临界区对象用法:InitializeCriticalSection、(TryEnterCriticalSection ),EnterCriticalSection、LeaveCriticalSection、DeleteCriticalSection

             

              EnterCriticalSection

                              线程进入临界区后 若其它线程试图想进入该临界区线程会处于阻塞(Wait)状态,使它们不占用任何CPU.           

3.读写锁

              允许多个读线程同时读取共享数据,但在同一时间只允许一个写线程修改共享数据。

             

              用法:

                              InitializeSRWLock

                             

                              写者:

                                              AcquireSRWLockExclusive、ReleaseSRWLockExclusive

                              读者:

                                              AcquireSRWLockShared、ReleaseSRWLockShared

                                             

                              我们并不需要销毁读写锁对象,因为系统自动处理读写锁对象。

             

              读写锁的效率比临界区要高到少一倍左右。

             

4.效率

              To summarize, if you want to get the best performance in an application,

              you should try to use nonshared data first and then use volatile reads, volatile writes, interlocked APIs, SRWLocks, critical sections.

              And if all of these won't work for your situation, then and only then, use kernel objects

             

5.条件变量

              条件变量要与临界区对象或读写锁对象一起使用。

              SleepConditionVariableCS、SleepConditionVariableSRW

              WakeConditionVariable、WakeAllConditionVariable           

             

6.Common API

              InterlockedExchangeAdd        InterlockedExchangeAdd64

              InterlockedExchange              InterlockedExchangePointer

             InterlockedBitTestAndReset

Windows核心编程(第五版)笔记 第八章 用户模式下的线程同步(Thread Sync... Windows核心编程(第五版)笔记 第九章 利用内核对象同步线程(Thread Sync... Windows核心编程(第五版)笔记 第六章 线程基本概念(Thread Basics) Windows核心编程(第五版)笔记 第十一章 线程池(The Windows Threa... Windows核心编程(第五版)笔记 第十章 同步和异步设备I/O(Synchronous... Windows核心编程(第五版)笔记 第五章 作业(Jobs) Windows核心编程(第五版)笔记 第二十章 DLL高级技巧 (DLL Advanced... Windows核心编程(第五版)笔记 第二章 字符和字符串(Working with Ch... Windows核心编程(第五版)笔记 第三章 内核对象(Kernel Objects) Windows核心编程(第五版)笔记 第一章 错误处理(Error Handling) 用户方式中线程的同步 多线程编程之四——线程的同步 多核编程中的线程随机竞争模式的概率分析 第八章 MFC的进程和线程 多核编程中的线程分组竞争模式 Linux之线程同步篇|Linux,线程同步-中国源码网: 开放源代码&&编程 Windows线程同步与互斥技术总结 - 陆小小的专栏 - CSDNBlog Windows 7系统下的安全模式 windows环境下mysql数据库的主从同步备份步骤 进程线程同步的四种方法 C#多线程编程:线程的启动 浅谈线程池(中):独立线程池的作用及IO线程池 - 老赵点滴 - 追求编程之美 - 博客园 第八章 诗的意象(下) 非归档模式下的用户管理备份与恢复