博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

http://www.kuqin.com/ace-2002-12/Part-One/Chapter-5.htm

 

在理论上,使应用多线程化可以改善性能(通过同时执行多个指令流),并简化程序结构(通过允许每个线程同步地、而不是反应式地或异步地执行)。而在实践中,由于获取和释放锁的开销,多线程应用常常并不比单线程应用执行得更好,甚至还会更糟。此外,由于避免条件竞争和死锁所需的复杂的并发控制协议,多线程应用常常难以编程。

本论文描述线程专有存储(Thread-Specific Storage)模式,该模式可减轻多线程性能和编程复杂性的若干问题。通过允许多个线程使用一个逻辑上的全局访问点来获取线程专有数据,而又不给每次访问带来锁定开销,线程专有存储模式可改善性能,并简化多线程应用。

 

 

线程专有存储应被用于这样的多线程应用:它们经常访问那些逻辑上是全局的、而物理上是专有于每个线程的对象。例如,像UNIX和Win32这样的操作系统使用errno来向应用报告错误信息。当错误在系统调用中发生时,OS设置errno来报告问题、并返回文档化的失败状态。当应用检测到失败时,它检查errno来确定发生了何种类型的错误。

 

“全局错误变量”errno方法对于单线程应用工作得相当好,在多线程应用中却会发生微妙的问题。特别地,占先式多线程系统中的条件竞争会导致一个线程中的方法所设置的errno值被另一线程中的应用错误地解释。因而,如果多个线程同时执行worker函数,全局版本的errno就有可能会由于条件竞争而被不正确地设置。