<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_夏天可是个好季节_分类_Multi-threading</title><id>http://feed.cnblogs.com/blog/u/37062/category/140542/rss</id><updated>2012-06-04T12:27:20Z</updated><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lxconan/category/140542.html"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/37062/category/140542/rss"/><entry><id>http://www.cnblogs.com/lxconan/archive/2008/09/02/1282391.html</id><title type="text">一个系列 之二</title><summary type="text">按照上一篇中的计划，这一篇应当从实践的角度分析如何在Lock Free Code中注意Out Of Order问题带来的影响。但是不想这一段时间出了这么多的事情，包括.NET的内存模型实现上出了Bug让人们更加关注这部分的问题。那么这篇就对前几篇小小随笔做一个全面的解释，改正文章里出现的理解错误，或容易被理解错误的地方。</summary><published>2008-09-02T14:13:00Z</published><updated>2008-09-02T14:13:00Z</updated><author><name>夏天可是个好季节</name><uri>http://www.cnblogs.com/lxconan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lxconan/archive/2008/09/02/1282391.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lxconan/archive/2008/09/02/1282391.html"/><content type="text">按照上一篇中的计划，这一篇应当从实践的角度分析如何在Lock Free Code中注意Out Of Order问题带来的影响。但是不想这一段时间出了这么多的事情，包括.NET的内存模型实现上出了Bug让人们更加关注这部分的问题。那么这篇就对前几篇小小随笔做一个全面的解释，改正文章里出现的理解错误，或容易被理解错误的地方。</content></entry><entry><id>http://www.cnblogs.com/lxconan/archive/2008/07/31/1257688.html</id><title type="text">到底差在了什么地方：Cs-&amp;gt;MUTEX-&amp;gt;Monitor-&amp;gt;WaitHandle</title><summary type="text">虽然我们整篇都在讨论.NET下的Multi-threading的问题，但是实际上很多问题都是可以类推的。例如前几次我们反复的说道了关于CriticalSection的问题。说它比MUTEX有何优越之处，例如速度就是一个明显的优势。但是从留言中发现在这个问题上存在着一些误会。今天不妨就闲扯一下这个问题。</summary><published>2008-07-31T14:38:00Z</published><updated>2008-07-31T14:38:00Z</updated><author><name>夏天可是个好季节</name><uri>http://www.cnblogs.com/lxconan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lxconan/archive/2008/07/31/1257688.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lxconan/archive/2008/07/31/1257688.html"/><content type="text">虽然我们整篇都在讨论.NET下的Multi-threading的问题，但是实际上很多问题都是可以类推的。例如前几次我们反复的说道了关于CriticalSection的问题。说它比MUTEX有何优越之处，例如速度就是一个明显的优势。但是从留言中发现在这个问题上存在着一些误会。今天不妨就闲扯一下这个问题。</content></entry><entry><id>http://www.cnblogs.com/lxconan/archive/2008/07/30/1256788.html</id><title type="text">练习：自己动手实现一个轻量级的信号量（二）</title><summary type="text">话说看了Angel Lucifer兄的留言之后，发现果然Microsoft在June CTP中实现了SemaphoreSlim，其中不但考虑了与旧的同步对象在接口上的一致性，还加入了Cancellation的检查。唉，怪我没有跟上形势！那么这篇就成班门弄斧了。不过，还应该坚持把它写完，善始善终，就当为大家整理思路。取笑罢了:-)</summary><published>2008-07-30T12:44:00Z</published><updated>2008-07-30T12:44:00Z</updated><author><name>夏天可是个好季节</name><uri>http://www.cnblogs.com/lxconan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lxconan/archive/2008/07/30/1256788.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lxconan/archive/2008/07/30/1256788.html"/><content type="text">话说看了Angel Lucifer兄的留言之后，发现果然Microsoft在June CTP中实现了SemaphoreSlim，其中不但考虑了与旧的同步对象在接口上的一致性，还加入了Cancellation的检查。唉，怪我没有跟上形势！那么这篇就成班门弄斧了。不过，还应该坚持把它写完，善始善终，就当为大家整理思路。取笑罢了:-)</content></entry><entry><id>http://www.cnblogs.com/lxconan/archive/2008/07/29/1255980.html</id><title type="text">练习：自己动手实现一个轻量级的信号量（一）</title><summary type="text">信号量历史悠久，折磨死了一代又一代的计算机专业学生，但是不得不承认其在Multi-thread环境下的巨大作用。最经典的案例莫过于管理一个环状缓冲区。.NET 中的Semaphore对象等同于Win32中的Semaphore。属于内核级对象，因此使用它的代价就比较大了。并且Semaphore对象每次仅仅能够等待一个Count，这有的时候让事情变得有些烦，例如你可能不得不将环状缓冲区分割为一个个的Chunk（实际上这是一个好方法，因为我们应该对于Cache进行优化）。Qt中的信号量可以一次获得多个Count，感觉很方便。综上，我们希望自己动手实现一个轻量级的，支持一次获得多个资源的信号量。</summary><published>2008-07-29T14:56:00Z</published><updated>2008-07-29T14:56:00Z</updated><author><name>夏天可是个好季节</name><uri>http://www.cnblogs.com/lxconan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lxconan/archive/2008/07/29/1255980.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lxconan/archive/2008/07/29/1255980.html"/><content type="text">信号量历史悠久，折磨死了一代又一代的计算机专业学生，但是不得不承认其在Multi-thread环境下的巨大作用。最经典的案例莫过于管理一个环状缓冲区。.NET 中的Semaphore对象等同于Win32中的Semaphore。属于内核级对象，因此使用它的代价就比较大了。并且Semaphore对象每次仅仅能够等待一个Count，这有的时候让事情变得有些烦，例如你可能不得不将环状缓冲区分割为一个个的Chunk（实际上这是一个好方法，因为我们应该对于Cache进行优化）。Qt中的信号量可以一次获得多个Count，感觉很方便。综上，我们希望自己动手实现一个轻量级的，支持一次获得多个资源的信号量。</content></entry><entry><id>http://www.cnblogs.com/lxconan/archive/2008/07/28/1254857.html</id><title type="text">选择虚拟机环境介入多线程编程是一个好的选择</title><summary type="text">多核处理，并行设计已经成为了计算机发展不可阻挡的趋势之一。越来越多的技术人员开始关注多线程程序设计。但是选择什么样的环境来介入多线程程序设计往往是一个比较头疼的问题。应该说，目前的许多环境并没有为多线程建立良好的模型，例如C和C++。为此，人们试图在这种环境中通过添加库的方式为其加入多线程的功能。但是，这显然是不合适的，实际上许多的时候，程序库根本不能解决所有的问题，我们真正需要的是一种将多线程纳入其规范体系之内的环境。</summary><published>2008-07-28T07:59:00Z</published><updated>2008-07-28T07:59:00Z</updated><author><name>夏天可是个好季节</name><uri>http://www.cnblogs.com/lxconan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lxconan/archive/2008/07/28/1254857.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lxconan/archive/2008/07/28/1254857.html"/><content type="text">多核处理，并行设计已经成为了计算机发展不可阻挡的趋势之一。越来越多的技术人员开始关注多线程程序设计。但是选择什么样的环境来介入多线程程序设计往往是一个比较头疼的问题。应该说，目前的许多环境并没有为多线程建立良好的模型，例如C和C++。为此，人们试图在这种环境中通过添加库的方式为其加入多线程的功能。但是，这显然是不合适的，实际上许多的时候，程序库根本不能解决所有的问题，我们真正需要的是一种将多线程纳入其规范体系之内的环境。</content></entry><entry><id>http://www.cnblogs.com/lxconan/archive/2008/07/21/1247222.html</id><title type="text">&amp;quot;Loads are not reorderd with other loads&amp;quot; is a FACT!! 再续：.NET MM IS BROKEN</title><summary type="text">上一篇随笔“"Loads are not reorderd with other loads" is a FACT!! 续：不要指望 volatile”中已经提到了。.NET的内存模型在volatile load上的实现是错误的。这在今天终于是半个官方的结论了。有关这个讨论的结论可以参考“A bit more formalism as to why CLR's MM is broken on x86/x64 ”。关于内存模型（MM）的问题枯燥，缩略词跟别的领域有过之无不及，为了便于说明趁着这个机会罗列一下。</summary><published>2008-07-20T17:52:00Z</published><updated>2008-07-20T17:52:00Z</updated><author><name>夏天可是个好季节</name><uri>http://www.cnblogs.com/lxconan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lxconan/archive/2008/07/21/1247222.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lxconan/archive/2008/07/21/1247222.html"/><content type="text">上一篇随笔“"Loads are not reorderd with other loads" is a FACT!! 续：不要指望 volatile”中已经提到了。.NET的内存模型在volatile load上的实现是错误的。这在今天终于是半个官方的结论了。有关这个讨论的结论可以参考“A bit more formalism as to why CLR's MM is broken on x86/x64 ”。关于内存模型（MM）的问题枯燥，缩略词跟别的领域有过之无不及，为了便于说明趁着这个机会罗列一下。</content></entry><entry><id>http://www.cnblogs.com/lxconan/archive/2008/07/19/1246776.html</id><title type="text">&amp;quot;Loads are not reorderd with other loads&amp;quot; is a FACT!! 续：不要指望 volatile</title><summary type="text">上一篇随笔中提到了volatile，实际上由于上一篇中提到的问题，volatile已经越来越远离其应有的含义了。在说这个问题之前，我们又要提.NET的内存模型问题（以下简称MM），我不指望在这里长篇大论的说其内存模型是如何的。简单的说就是以下的几句话...</summary><published>2008-07-19T11:55:00Z</published><updated>2008-07-19T11:55:00Z</updated><author><name>夏天可是个好季节</name><uri>http://www.cnblogs.com/lxconan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lxconan/archive/2008/07/19/1246776.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lxconan/archive/2008/07/19/1246776.html"/><content type="text">上一篇随笔中提到了volatile，实际上由于上一篇中提到的问题，volatile已经越来越远离其应有的含义了。在说这个问题之前，我们又要提.NET的内存模型问题（以下简称MM），我不指望在这里长篇大论的说其内存模型是如何的。简单的说就是以下的几句话...</content></entry><entry><id>http://www.cnblogs.com/lxconan/archive/2008/07/19/1246569.html</id><title type="text">&amp;quot;Loads are not reorderd with other loads&amp;quot; is a FACT!!</title><summary type="text">对于多线程编程的难度，再充分的心里准备也许都是不够的。前一段时间一直在整理一些有关多线程编程的内容（一个对多线程算法库编写过程中的经验积累）。而在前天，一篇来自于Microsoft 的PFX的Joe的博文惊现："Loads cannot pass other loads" is a ~myth ，着实让人惊出了一身冷汗。</summary><published>2008-07-19T03:57:00Z</published><updated>2008-07-19T03:57:00Z</updated><author><name>夏天可是个好季节</name><uri>http://www.cnblogs.com/lxconan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lxconan/archive/2008/07/19/1246569.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lxconan/archive/2008/07/19/1246569.html"/><content type="text">对于多线程编程的难度，再充分的心里准备也许都是不够的。前一段时间一直在整理一些有关多线程编程的内容（一个对多线程算法库编写过程中的经验积累）。而在前天，一篇来自于Microsoft 的PFX的Joe的博文惊现："Loads cannot pass other loads" is a ~myth ，着实让人惊出了一身冷汗。</content></entry><entry><id>http://www.cnblogs.com/lxconan/archive/2008/06/15/1221938.html</id><title type="text">一个系列：之一</title><summary type="text">非顺序执行：英文称作 Out-of-order execution，也称乱序执行。是一种在高性能CPU设计中所广泛采用的技术。这个技术企图最大限度的利用CPU的各个周期，改变指令的执行顺序，以降低慢操作或其他操作造成的延迟。这里所说的改变执行顺序，是CPU的行为，不是编译器的行为！</summary><published>2008-06-15T05:36:00Z</published><updated>2008-06-15T05:36:00Z</updated><author><name>夏天可是个好季节</name><uri>http://www.cnblogs.com/lxconan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lxconan/archive/2008/06/15/1221938.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lxconan/archive/2008/06/15/1221938.html"/><content type="text">非顺序执行：英文称作 Out-of-order execution，也称乱序执行。是一种在高性能CPU设计中所广泛采用的技术。这个技术企图最大限度的利用CPU的各个周期，改变指令的执行顺序，以降低慢操作或其他操作造成的延迟。这里所说的改变执行顺序，是CPU的行为，不是编译器的行为！</content></entry></feed>
