<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Lockfree_mpmc and lockfree ParallelQueue ... in Intel® Moderncode for Parallel Architectures</title>
    <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805252#M765</link>
    <description>&lt;BR /&gt;&amp;gt;The queue passed your "verification", and then you were pointed to some serious problem. Then you fixed &lt;BR /&gt;&amp;gt; [...]&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;That was with the SPMC, i have corrected the problem with SPMC and it's working &lt;BR /&gt;well.&lt;BR /&gt;&lt;BR /&gt;Now look at the MPMC it's working well, and invite you to verify ityourself.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Amine.&lt;BR /&gt;&lt;BR /&gt;</description>
    <pubDate>Wed, 20 Oct 2010 09:40:31 GMT</pubDate>
    <dc:creator>aminer10</dc:creator>
    <dc:date>2010-10-20T09:40:31Z</dc:date>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805249#M762</link>
      <description>&lt;P&gt;&lt;BR /&gt;Hello all,&lt;/P&gt;&lt;P&gt;As you will notice, even inside NASA and other institutions &lt;BR /&gt;in France (Ariane...) are making errors in there programs...&lt;/P&gt;&lt;P&gt;Read this:&lt;BR /&gt;&lt;BR /&gt;"Although unexpected computer resets and human errors &lt;BR /&gt;continue to frustrate NASA/JPL scientists, both Pathfinder &lt;BR /&gt;and Sojourner... Current priorities involve fixing &lt;BR /&gt;the software bug that is causing Pathfinder to reset its &lt;BR /&gt;computer" &lt;/P&gt;&lt;P&gt;"The trouble experienced by the Mars lander "Mars Pathfinder" &lt;BR /&gt;is a classic example of problems caused by priority inversion &lt;BR /&gt;in realtime systems" &lt;/P&gt;&lt;P&gt;And don't forget about the french Ariane 5 rocket explosion:&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.youtube.com/watch?v=z-r9cYp3tTE"&gt;http://www.youtube.com/watch?v=z-r9cYp3tTE&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;So, i have just updated and corrected a problem with &lt;BR /&gt;lockfree_mpmc, if you take a look at lockfree_mpmc.pas&lt;BR /&gt;inside my lockfree Parallel Queue zip file: &lt;/P&gt;&lt;P&gt;&lt;A href="http://pages.videotron.com/aminer/parallelqueue/parallelqueue.htm"&gt;http://pages.videotron.com/aminer/parallelqueue/parallelqueue.htm&lt;/A&gt;&lt;/P&gt;&lt;P&gt;You will notice that i have modified the algorithm in the push() &lt;BR /&gt;side, and i have used a test like this:&lt;/P&gt;&lt;P&gt;if getlength &amp;gt;= fsize &lt;BR /&gt;then &lt;BR /&gt; begin &lt;BR /&gt; result:=false;&lt;BR /&gt; exit;&lt;BR /&gt;end; &lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Now i have tested my new algorithm and it is working very well.&lt;/P&gt;&lt;P&gt;Correctness:&lt;/P&gt;&lt;P&gt;To not make the correctness verification longer, i will concentrate on &lt;BR /&gt;the more important parts. If you take a look at the lock-free ParallelQueue &lt;BR /&gt;source code , inside lockfree_mpmc.pas you will read this in push side:&lt;/P&gt;&lt;P&gt;function TLockfree_MPMC.push(tm : tNodeQueue):boolean;//stdcall;&lt;BR /&gt;var lasttail,newtemp:longword;&lt;BR /&gt;begin&lt;BR /&gt;if getlength &amp;gt;= fsize &lt;BR /&gt; then &lt;BR /&gt; begin&lt;BR /&gt; result:=false;&lt;BR /&gt; exit;&lt;BR /&gt; end; &lt;BR /&gt;result:=true;&lt;BR /&gt;//newTemp:=windows.interlockedincrement(temp);&lt;BR /&gt;newTemp:=LockedIncLong(temp);&lt;/P&gt;&lt;P&gt;lastTail:=newTemp-1;&lt;BR /&gt;setObject(lastTail,tm);&lt;BR /&gt;repeat&lt;BR /&gt; if CAS(tail[0],lasttail,newtemp) &lt;BR /&gt; then &lt;BR /&gt; begin&lt;BR /&gt; exit; &lt;BR /&gt; end;&lt;BR /&gt;sleep(0);&lt;BR /&gt;until false;&lt;BR /&gt;end;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;So, let's say the size of the bounded queue is 1000 , and imagine &lt;BR /&gt;that the threads are executing the "if getlength &amp;gt;= fsize " all at the &lt;BR /&gt;same time, and imagine that the getlength returns 999, so, the &lt;BR /&gt;"if getlength &amp;gt;= fsize" will returns false , and since we have &lt;BR /&gt;fSize:=(1 shl aPower) - margin , with a margin of 1000 &lt;BR /&gt;(margin must be &amp;gt;= to the number of cores) , there will be no &lt;BR /&gt;problem(overflow..)... &lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Now in the pop side, you will read this:&lt;/P&gt;&lt;P&gt;function TLockfree_MPMC.pop(var obj:tNodeQueue):boolean;&lt;/P&gt;&lt;P&gt;var lastHead : longword;&lt;BR /&gt;begin&lt;BR /&gt; repeat&lt;BR /&gt; lastHead:=head[0];&lt;BR /&gt; if tail[0]&amp;lt;&amp;gt;head[0]&lt;BR /&gt; then&lt;BR /&gt; begin&lt;BR /&gt; obj:=getObject(lastHead);&lt;BR /&gt; if CAS(head[0],lasthead,lasthead+1) &lt;BR /&gt; then &lt;BR /&gt; begin&lt;BR /&gt; result:=true; &lt;BR /&gt; exit;&lt;BR /&gt; end;&lt;BR /&gt; end &lt;BR /&gt; else &lt;BR /&gt; begin&lt;BR /&gt; result:=false;&lt;BR /&gt; exit;&lt;BR /&gt; end;&lt;BR /&gt; until false;&lt;BR /&gt;end;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;So, as you have noticed, there is a test like this: &lt;BR /&gt;if CAS(head[0],lasthead,lasthead+1) , and this test &lt;BR /&gt;avoids something like the ABA problem, cause if head &lt;BR /&gt;have changed , the CAS() will fail.&lt;/P&gt;&lt;P&gt;I have updated my Threadpool engine with the new lockfree_mpmc,&lt;BR /&gt;please download my other modules that use lockfree_mpmc.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Sincerely&lt;BR /&gt;Amine Moulay Ramdane.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Oct 2010 08:31:17 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805249#M762</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T08:31:17Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805250#M763</link>
      <description>&lt;DIV id="tiny_quote"&gt;
                &lt;DIV style="margin-left: 2px; margin-right: 2px;"&gt;Quoting &lt;A rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=466896" class="basic" href="https://community.intel.com/en-us/profile/466896/"&gt;aminer10&lt;/A&gt;&lt;/DIV&gt;
                &lt;DIV style="background-color: #e5e5e5; padding: 5px; border: 1px inset; margin-left: 2px; margin-right: 2px;"&gt;&lt;I&gt;&lt;BR /&gt;&lt;P&gt;Correctness:&lt;/P&gt;&lt;P&gt;To not make the correctness verification longer, i will concentrate on &lt;BR /&gt;the more important parts. If you take a look at the lock-free ParallelQueue &lt;BR /&gt;source code , inside lockfree_mpmc.pas you will read this in push side:&lt;/P&gt;&lt;/I&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The proof looks rather weak.&lt;/P&gt;&lt;P&gt;The queue passed your "verification", and then you were pointed to some serious problem. Then you fixed it, and they queue passed your "verification" again. Then you were pointed to other serious problem. You fixed it again, and they queue passed your "verification" again. And now you find one more problem, and assert that this time it should be correct... It brings your "verification" process into question...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Oct 2010 08:47:17 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805250#M763</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-10-20T08:47:17Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805251#M764</link>
      <description>&lt;BR /&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Dmitry Vyukov the prince Jedi is coming back ..&lt;BR /&gt;&lt;BR /&gt;Let me tell you that I have reasonned about the algorithm &lt;BR /&gt;and used logic and i have looked at itfrom different sides/perspectives &lt;BR /&gt;and i can tell you that it's working. &lt;BR /&gt;&lt;BR /&gt;I invite you to look at the source code Dmitry and you &lt;BR /&gt;willsee that am not wrong..&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Both the SPMC and MPMC are working now, look at them yourself.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Sincerely&lt;BR /&gt;Amine Moulay Ramdane&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Wed, 20 Oct 2010 09:23:32 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805251#M764</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T09:23:32Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805252#M765</link>
      <description>&lt;BR /&gt;&amp;gt;The queue passed your "verification", and then you were pointed to some serious problem. Then you fixed &lt;BR /&gt;&amp;gt; [...]&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;That was with the SPMC, i have corrected the problem with SPMC and it's working &lt;BR /&gt;well.&lt;BR /&gt;&lt;BR /&gt;Now look at the MPMC it's working well, and invite you to verify ityourself.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Amine.&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Wed, 20 Oct 2010 09:40:31 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805252#M765</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T09:40:31Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805253#M766</link>
      <description>&lt;BR /&gt;&lt;BR /&gt;Hello again,&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;And of course i am usinglockfree ParallelQueue&lt;BR /&gt; insidemy threadpool enginethat is using work-stealingand &lt;BR /&gt;a lockfree queue for each worker..&lt;BR /&gt;&lt;BR /&gt;Now if you want to reduce even more the contention, you can&lt;BR /&gt;for exemple 'batch' the reads...&lt;BR /&gt;&lt;BR /&gt;I have even tested itagainst the locked version, &lt;BR /&gt;and it scores far better thanthe locked version.&lt;BR /&gt;&lt;BR /&gt;It's one of the best algorithm and i tell you that it's useful Dmitry :)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Amine Moulay Ramdane.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Wed, 20 Oct 2010 10:11:22 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805253#M766</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T10:11:22Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805254#M767</link>
      <description>&lt;DIV id="tiny_quote"&gt;
                &lt;DIV style="margin-left: 2px; margin-right: 2px;"&gt;Quoting &lt;A rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=466896" class="basic" href="https://community.intel.com/en-us/profile/466896/"&gt;aminer10&lt;/A&gt;&lt;/DIV&gt;
                &lt;DIV style="background-color: #e5e5e5; padding: 5px; border: 1px inset; margin-left: 2px; margin-right: 2px;"&gt;&lt;I&gt;Dmitry Vyukov the prince Jedi is coming back ..&lt;BR /&gt;&lt;BR /&gt;Let me tell you that I have reasonned about the algorithm &lt;BR /&gt;and used logic and i have looked at itfrom different sides/perspectives &lt;BR /&gt;and i can tell you that it's working. &lt;BR /&gt;&lt;BR /&gt;I invite you to look at the source code Dmitry and you &lt;BR /&gt;willsee that am not wrong..&lt;BR /&gt;&lt;BR /&gt;&lt;/I&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;function TLockfree_MPMC.getLength:longword;&lt;BR /&gt;begin&lt;BR /&gt; if tail[0] &amp;lt; head[0]&lt;BR /&gt; then result:= (High(longword)-head[0])+(1+tail[0])&lt;BR /&gt; else result:=(tail[0]-head[0]);&lt;BR /&gt;end;&lt;/P&gt;&lt;BR /&gt;Here you checking the condition with one set of values, and then doing calculations with another set of values. It renders the check basically useless. You can just remove it w/o any change in behavior. What I am missing?&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Wed, 20 Oct 2010 12:19:03 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805254#M767</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-10-20T12:19:03Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805255#M768</link>
      <description>&amp;gt;Here you checking the condition with one set of values, &lt;BR /&gt;&amp;gt;and then doing calculations with another set of values. &lt;BR /&gt;&amp;gt;It renders the check basically useless. You can just &lt;BR /&gt;&amp;gt;remove it w/o any change in behavior. What I am missing?&lt;BR /&gt;&lt;BR /&gt;To just get an idea of the length and this not a problem.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Amine.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Wed, 20 Oct 2010 12:25:53 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805255#M768</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T12:25:53Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805256#M769</link>
      <description>&lt;BR /&gt;&lt;BR /&gt;I understand , you mean that i have to save the head and tail&lt;BR /&gt;before doing the calcultation...&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;that's correct, any other thing ?&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Amine.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Wed, 20 Oct 2010 12:29:01 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805256#M769</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T12:29:01Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805257#M770</link>
      <description>&lt;DIV id="tiny_quote"&gt;
                &lt;DIV style="margin-left: 2px; margin-right: 2px;"&gt;Quoting &lt;A rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=466896" class="basic" href="https://community.intel.com/en-us/profile/466896/"&gt;aminer10&lt;/A&gt;&lt;/DIV&gt;
                &lt;DIV style="background-color: #e5e5e5; padding: 5px; border: 1px inset; margin-left: 2px; margin-right: 2px;"&gt;&lt;I&gt;&amp;gt;Here you checking the condition with one set of values, &lt;BR /&gt;&amp;gt;and then doing calculations with another set of values. &lt;BR /&gt;&amp;gt;It renders the check basically useless. You can just &lt;BR /&gt;&amp;gt;remove it w/o any change in behavior. What I am missing?&lt;BR /&gt;&lt;BR /&gt;To just get an idea of the length and this not a problem.&lt;BR /&gt;&lt;BR /&gt;&lt;/I&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Well, but you are using getLength() in your proof...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Oct 2010 12:29:56 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805257#M770</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-10-20T12:29:56Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805258#M771</link>
      <description>&lt;BR /&gt;&lt;BR /&gt;Take a look more to the code, and tell me if there is other things...&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Amine.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Wed, 20 Oct 2010 12:30:15 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805258#M771</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T12:30:15Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805259#M772</link>
      <description>&lt;DIV id="tiny_quote"&gt;
                &lt;DIV style="margin-left: 2px; margin-right: 2px;"&gt;Quoting &lt;A rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=466896" class="basic" href="https://community.intel.com/en-us/profile/466896/"&gt;aminer10&lt;/A&gt;&lt;/DIV&gt;
                &lt;DIV style="background-color: #e5e5e5; padding: 5px; border: 1px inset; margin-left: 2px; margin-right: 2px;"&gt;So, let's say the size of the bounded queue is 1000 , and imagine &lt;BR /&gt;&lt;I&gt;&lt;P&gt;that the threads are executing the "if getlength &amp;gt;= fsize " all at the &lt;BR /&gt;same time, and imagine that the getlength returns 999, so, the &lt;BR /&gt;"if getlength &amp;gt;= fsize" will returns false , and since we have &lt;BR /&gt;fSize:=(1 shl aPower) - margin , with a margin of 1000 &lt;BR /&gt;(margin must be &amp;gt;= to the number of cores) , there will be no &lt;BR /&gt;problem(overflow..)...&lt;/P&gt;&lt;/I&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;P&gt;And what if another thread will push margin items in between? Won't you still get overflow?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Oct 2010 12:32:05 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805259#M772</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-10-20T12:32:05Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805260#M773</link>
      <description>&lt;BR /&gt;Dmitry write:&lt;BR /&gt;&amp;gt;And what if another thread will push margin items in between? Won't you still get overflow?&lt;BR /&gt;&lt;BR /&gt;I have tried to make the algorithm&lt;A href="http://www.emadar.com/fpc/lockfree.htm"&gt;http://www.emadar.com/fpc/lockfree.htm&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;to not overflow, but apparently it is not working at all...&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Have you any idea Dmitry how to make it work and NOT overflow?,&lt;BR /&gt;cause this algorithm is very fast .. &lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Amine.&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Wed, 20 Oct 2010 12:37:07 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805260#M773</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T12:37:07Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805261#M774</link>
      <description>&lt;DIV id="tiny_quote"&gt;
                &lt;DIV style="margin-left: 2px; margin-right: 2px;"&gt;Quoting &lt;A rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=466896" class="basic" href="https://community.intel.com/en-us/profile/466896/"&gt;aminer10&lt;/A&gt;&lt;/DIV&gt;
                &lt;DIV style="background-color: #e5e5e5; padding: 5px; border: 1px inset; margin-left: 2px; margin-right: 2px;"&gt;&lt;I&gt;Take a look more to the code, and tell me if there is other things...&lt;BR /&gt;&lt;BR /&gt;&lt;/I&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am fed up about concurrent code that works only in sequential mode.&lt;/P&gt;&lt;P&gt;In either case, the best I can do is to verify it with Relacy... which you can do too.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Oct 2010 12:44:22 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805261#M774</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-10-20T12:44:22Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805262#M775</link>
      <description>&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;This algorithm was not mine: &lt;A href="http://www.emadar.com/fpc/lockfree.htm"&gt;http://www.emadar.com/fpc/lockfree.htm&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;I have tried to make the algorithm not to overflow...&lt;BR /&gt;&lt;BR /&gt;The truth is:&lt;BR /&gt;&lt;BR /&gt;It canoverflow and you can havethe kind ofAriane 5 rocket explosion,&lt;BR /&gt;look at this:&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.youtube.com/watch?v=z-r9cYp3tTE"&gt;http://www.youtube.com/watch?v=z-r9cYp3tTE&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Amine Moulay Ramdane.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Oct 2010 12:45:23 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805262#M775</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T12:45:23Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805263#M776</link>
      <description>&lt;DIV id="tiny_quote"&gt;
                &lt;DIV style="margin-left: 2px; margin-right: 2px;"&gt;Quoting &lt;A rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=466896" class="basic" href="https://community.intel.com/en-us/profile/466896/"&gt;aminer10&lt;/A&gt;&lt;/DIV&gt;
                &lt;DIV style="background-color: #e5e5e5; padding: 5px; border: 1px inset; margin-left: 2px; margin-right: 2px;"&gt;&lt;I&gt;&lt;BR /&gt;Have you any idea Dmitry how to make it work and NOT overflow?,&lt;BR /&gt;cause this algorithm is very fast .. &lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/I&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have no idea how to fix it. However I have another more scalable algorithm:&lt;/P&gt;&lt;P&gt;&lt;A href="http://groups.google.com/group/lock-free/browse_frm/thread/f9ba9895f6d0987d" target="_blank"&gt;http://groups.google.com/group/lock-free/browse_frm/thread/f9ba9895f6d0987d&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Oct 2010 12:48:48 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805263#M776</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-10-20T12:48:48Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805264#M777</link>
      <description>&lt;SPAN style="font-size: x-small;"&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;Dmitry look at the following code, it does use locks&lt;BR /&gt;in the push side , but it does give better performance than &lt;BR /&gt;lockfreE_mpmc algorithm usingmy ParallelQueue of course&lt;BR /&gt;and it avoids overflow problem...&lt;BR /&gt;&lt;BR /&gt;Look at this:&lt;BR /&gt;&lt;BR /&gt;------------------&lt;BR /&gt;&lt;BR /&gt;unit RingBuffer1;&lt;/P&gt;&lt;P&gt;interface&lt;/P&gt;&lt;P&gt;uses&lt;/P&gt;&lt;P&gt;{$IFDEF Delphi}windows,{$ENDIF}&lt;/P&gt;&lt;P&gt;{$IFDEF DELPHI2005+}windows,{$ENDIF}&lt;/P&gt;&lt;P&gt;{$IFDEF FreePascal}windows,sysutils,{$ENDIF}&lt;/P&gt;&lt;P&gt;syncobjs,spinlock;&lt;/P&gt;&lt;P&gt;Const ctfree = 0 ;&lt;/P&gt;&lt;P&gt;ctbusy = 1 ;&lt;/P&gt;&lt;P&gt;type&lt;/P&gt;&lt;P&gt;tNodeQueue = tObject;&lt;/P&gt;&lt;P&gt;typecache1 = array[0..15] of longword;&lt;/P&gt;&lt;P&gt;TRingBuffer = class&lt;/P&gt;&lt;P&gt;private&lt;/P&gt;&lt;P&gt;tail,&lt;/P&gt;&lt;P&gt;head: typecache1;&lt;/P&gt;&lt;P&gt;fMask : longword;&lt;/P&gt;&lt;P&gt;fSize : longword;&lt;/P&gt;&lt;P&gt;temp:integer;&lt;/P&gt;&lt;P&gt;tab : array of tNodeQueue; &lt;/P&gt;&lt;P&gt;cs1,cs2:TCriticalSection;&lt;/P&gt;&lt;P&gt;sl1,sl2:TSpinLock;&lt;/P&gt;&lt;P&gt;v,t:longword;&lt;/P&gt;&lt;P&gt;procedure setobject(lp : longword;const aobject : tNodeQueue);&lt;/P&gt;&lt;P&gt;function getLength:longword;&lt;/P&gt;&lt;P&gt;function getSize:longword;&lt;/P&gt;&lt;P&gt;function getObject(lp : longword):tNodeQueue;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;public&lt;/P&gt;&lt;P&gt;constructor create(aPower : integer =20); {allocate tab with size equal 2^aPower, for 20 size is equal 1048576}&lt;/P&gt;&lt;P&gt;destructor Destroy; override;&lt;/P&gt;&lt;P&gt;procedure EnterCS;&lt;/P&gt;&lt;P&gt;procedure LeaveCS;&lt;/P&gt;&lt;P&gt;function push(tm : tNodeQueue):boolean; &lt;/P&gt;&lt;P&gt;function pop(var obj:tNodeQueue):boolean;&lt;/P&gt;&lt;P&gt;property length : longword read getLength;&lt;/P&gt;&lt;P&gt;property count: longword read getLength;&lt;/P&gt;&lt;P&gt;property size : longword read getSize;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;implementation&lt;/P&gt;&lt;P&gt;function CAS(var Target: longword; Comperand: longword;NewValue: longword ): boolean; assembler;stdcall;&lt;/P&gt;&lt;P&gt;asm&lt;/P&gt;&lt;P&gt;mov ecx,Target&lt;/P&gt;&lt;P&gt;mov edx,NewValue&lt;/P&gt;&lt;P&gt;mov eax,Comperand&lt;/P&gt;&lt;P&gt;lock cmpxchg [ecx],edx&lt;/P&gt;&lt;P&gt;JNZ @@2&lt;/P&gt;&lt;P&gt;MOV AL,01&lt;/P&gt;&lt;P&gt;JMP @@Exit&lt;/P&gt;&lt;P&gt;@@2:&lt;/P&gt;&lt;P&gt;XOR AL,AL&lt;/P&gt;&lt;P&gt;@@Exit:&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Procedure TRingBuffer.EnterCS;&lt;/P&gt;&lt;P&gt;Begin&lt;/P&gt;&lt;P&gt;Repeat&lt;/P&gt;&lt;P&gt;asm pause end;&lt;/P&gt;&lt;P&gt;Until CAS(V,0,1);&lt;/P&gt;&lt;P&gt;sleep(0);&lt;/P&gt;&lt;P&gt;End;&lt;/P&gt;&lt;P&gt;Procedure TRingBuffer.LeaveCS;&lt;/P&gt;&lt;P&gt;Begin&lt;/P&gt;&lt;P&gt;V:=ctfree;&lt;/P&gt;&lt;P&gt;asm pause end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//sleep(0);&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;constructor TRingBuffer.create(aPower : integer );&lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;cs1:=TCriticalSection.create;&lt;/P&gt;&lt;P&gt;cs2:=TCriticalSection.create;&lt;/P&gt;&lt;P&gt;sl1:=TSpinlock.create;&lt;/P&gt;&lt;P&gt;sl2:=TSpinlock.create;&lt;/P&gt;&lt;P&gt;fMask:=not($FFFFFFFF shl aPower);&lt;/P&gt;&lt;P&gt;fSize:=(1 shl aPower) ;&lt;/P&gt;&lt;P&gt;setLength(tab,fSize);&lt;/P&gt;&lt;P&gt;tail[0]:=0;&lt;/P&gt;&lt;P&gt;head[0]:=0;&lt;/P&gt;&lt;P&gt;V:=ctfree;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;destructor TRingBuffer.Destroy;&lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;cs1.free;&lt;/P&gt;&lt;P&gt;cs2.free;&lt;/P&gt;&lt;P&gt;setLength(tab,0);&lt;/P&gt;&lt;P&gt;inherited Destroy;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;procedure TRingBuffer.setObject(lp : longword;const aobject : tNodeQueue);&lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;tab[lp and fMask]:=aObject;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;function TRingBuffer.getObject(lp : longword):tNodeQueue;&lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;result:=tab[lp and fMask];&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;function TRingBuffer.push(tm : tNodeQueue):boolean;&lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;result:=true;&lt;/P&gt;&lt;P&gt;//cs1.enter;&lt;/P&gt;&lt;P&gt;sl1.Acquire;&lt;/P&gt;&lt;P&gt;if getlength &amp;gt;= fsize &lt;/P&gt;&lt;P&gt;then &lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;result:=false;&lt;/P&gt;&lt;P&gt;//cs1.leave;&lt;/P&gt;&lt;P&gt;sl1.Release;&lt;/P&gt;&lt;P&gt;exit;&lt;/P&gt;&lt;P&gt;end; &lt;/P&gt;&lt;P&gt;setObject(tail[0],tm);&lt;/P&gt;&lt;P&gt;inc(tail[0]);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//cs1.leave;&lt;/P&gt;&lt;P&gt;sl1.release;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;function TRingBuffer.pop(var obj:tNodeQueue):boolean;&lt;/P&gt;&lt;P&gt;var lastHead : longword;&lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;repeat&lt;/P&gt;&lt;P&gt;lastHead:=head[0];&lt;/P&gt;&lt;P&gt;if tail[0]&amp;lt;&amp;gt;head[0]&lt;/P&gt;&lt;P&gt;then&lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;obj:=getObject(lastHead);&lt;/P&gt;&lt;P&gt;if CAS(head[0],lasthead,lasthead+1) &lt;/P&gt;&lt;P&gt;then &lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;result:=true; &lt;/P&gt;&lt;P&gt;exit;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;end &lt;/P&gt;&lt;P&gt;else &lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;result:=false;&lt;/P&gt;&lt;P&gt;exit;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;until false;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;function TRingBuffer.getLength:longword;&lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;if tail[0] &amp;lt; head[0]&lt;/P&gt;&lt;P&gt;then result:= (High(longword)-head[0])+(1+tail[0])&lt;/P&gt;&lt;P&gt;else result:=(tail[0]-head[0]);&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;function TRingBuffer.getSize:longword;&lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;result:=fSize;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;end.&lt;BR /&gt;&lt;BR /&gt;---------------&lt;/P&gt;&lt;/SPAN&gt;</description>
      <pubDate>Wed, 20 Oct 2010 13:00:44 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805264#M777</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T13:00:44Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805265#M778</link>
      <description>&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;I have tested Ringbuffer1(it does use locks in the push side) and if &lt;BR /&gt;i combine it with my parallelqueue it does give better performance &lt;BR /&gt;than lockfree_mpmc + parallelqueue.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Amine.</description>
      <pubDate>Wed, 20 Oct 2010 13:05:17 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805265#M778</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T13:05:17Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805266#M779</link>
      <description>&lt;BR /&gt;&lt;SPAN style="font-size: x-small;"&gt;&lt;P&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;I have uploaded the new version ParallelQueue version 1.22 to my website, lockfree_mpmc does use a margin of 1000 threads now..&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I have changed getlength to:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;---------&lt;BR /&gt;&lt;BR /&gt;function TLockfree_MPMC.getLength:longword;&lt;/P&gt;&lt;P&gt;var head1,tail1:longword;&lt;/P&gt;&lt;P&gt;begin&lt;/P&gt;&lt;P&gt;head1:=head[0];&lt;/P&gt;&lt;P&gt;tail1:=tail[0];&lt;/P&gt;&lt;P&gt;if tail1 &amp;lt; head1&lt;/P&gt;&lt;P&gt;then result:= (High(longword)-head1)+(1+tail1)&lt;/P&gt;&lt;P&gt;else result:=(tail1-head1);&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;-----------&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;So, let's say the size of the bounded queue is 1000 , and imagine that the threads are executing the "if getlength &amp;gt;= fsize " all at the same time, and imagine that the getlength returns 999, so, the "if getlength &amp;gt;= fsize" will returns false , and since we have a fSize:=(1 shl aPower) - margin , with a margin of 1000 (margin must be &amp;gt;= to the number of threads) , there will be no problem(overflow..)... &lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;And i think that's correct now.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Sincerely,&lt;BR /&gt;Amine Moulay Ramdane&lt;/P&gt;&lt;/SPAN&gt;&lt;SPAN style="font-size: small;"&gt;&lt;B&gt;&lt;BR /&gt;&lt;/B&gt;&lt;/SPAN&gt;</description>
      <pubDate>Wed, 20 Oct 2010 14:49:46 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805266#M779</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T14:49:46Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805267#M780</link>
      <description>&lt;BR /&gt;&lt;BR /&gt;My website:&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://pages.videotron.com/aminer/"&gt;http://pages.videotron.com/aminer/&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Amine Moulay Ramdane.</description>
      <pubDate>Wed, 20 Oct 2010 14:53:52 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805267#M780</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T14:53:52Z</dc:date>
    </item>
    <item>
      <title>Lockfree_mpmc and lockfree ParallelQueue ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805268#M781</link>
      <description>&lt;BR /&gt;&lt;BR /&gt;Dmitry wrote:&lt;BR /&gt;&amp;gt;And what if another thread will push margin items in between? Won't you still get overflow?&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;margin is limited to 1000 threads in the 1.22 version, it will work.&lt;BR /&gt;&lt;BR /&gt;Imagine that fsize is 1000 and in the worst case we are at 999 items, if &lt;BR /&gt;all the 1000 threads have crossed there will still be no problem, no overflow.&lt;BR /&gt;&lt;BR /&gt;The algorithm is correct now.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Amine.</description>
      <pubDate>Wed, 20 Oct 2010 15:01:07 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Lockfree-mpmc-and-lockfree-ParallelQueue/m-p/805268#M781</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2010-10-20T15:01:07Z</dc:date>
    </item>
  </channel>
</rss>

