<?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 2 lock instructions in sequence, behavior in Intel® Moderncode for Parallel Architectures</title>
    <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/2-lock-instructions-in-sequence-behavior/m-p/1203239#M8146</link>
    <description>&lt;P&gt;Hello Intel community,&lt;/P&gt;
&lt;P&gt;I have a code where I need to atomically increment a value, but before doing so I need to check if that value is above a certain limit. Now in C with -O2 this function&lt;/P&gt;
&lt;DIV style="color: #000000; background-color: #fffffe; font-family: 'Consolas,;"&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;int&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;func(&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;int&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;num)&amp;nbsp;{&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__sync_val_compare_and_swap(&amp;amp;num,&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;10&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;return&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;__sync_add_and_fetch(&amp;amp;num,&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;compiles as follows&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV style="color: #000000; background-color: #fffffe; font-family: 'Consolas,;"&gt;
&lt;DIV&gt;&lt;SPAN style="color: #008080;"&gt;func(int):&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;1: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;10&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;2: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;xor&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;3: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edi&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;4: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;lock&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080;"&gt;cmpxchg&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;5: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;6: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;lock&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080;"&gt;xadd&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;7: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;add&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;8: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;ret&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Question number 1:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Is it possible that under high load another thread (thread B) might do&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN style="color: #008080;"&gt;&amp;nbsp;&amp;nbsp; lock&amp;nbsp;xadd&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&amp;nbsp;[&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;-&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;],&amp;nbsp;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;on line 5 while thread A is doing mov?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="color: #000000; background-color: #fffffe; font-family: 'Consolas,;"&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Question number 2:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="color: #000000; background-color: #fffffe; font-family: 'Consolas,;"&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Suppose I rewrite this code as follows:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="color: #000000; background-color: #fffffe; font-family: 'Consolas,;"&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;1: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;10&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;2: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;xor&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;3: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edi&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;4: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;ebx&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;SPAN style="color: #000000;"&gt;5: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;lock&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080;"&gt;cmpxchg&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;6: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;lock&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080;"&gt;xadd&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;ebx&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;7: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;add&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;ebx&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;8: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;ret&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;now does the CPU guarantee that no other threads will lock between lines 5 and 6 or is it about whoever is faster.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Food for thought:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;lets say I am working on NUMA system and thread A executes on CPU 0&amp;nbsp; the memory region addressed in function is located on CPU4. thread B also executes same function. Is it possible that while thread A locks on line 5 and unlocks thread B will lock its line 6 before thread A can lock line 6 considering B is closer to memory region than A.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Thanks in advance,&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;David&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
    <pubDate>Sun, 23 Aug 2020 18:58:02 GMT</pubDate>
    <dc:creator>dtsulaia</dc:creator>
    <dc:date>2020-08-23T18:58:02Z</dc:date>
    <item>
      <title>2 lock instructions in sequence, behavior</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/2-lock-instructions-in-sequence-behavior/m-p/1203239#M8146</link>
      <description>&lt;P&gt;Hello Intel community,&lt;/P&gt;
&lt;P&gt;I have a code where I need to atomically increment a value, but before doing so I need to check if that value is above a certain limit. Now in C with -O2 this function&lt;/P&gt;
&lt;DIV style="color: #000000; background-color: #fffffe; font-family: 'Consolas,;"&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;int&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;func(&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;int&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;num)&amp;nbsp;{&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__sync_val_compare_and_swap(&amp;amp;num,&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;10&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;return&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;__sync_add_and_fetch(&amp;amp;num,&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;compiles as follows&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV style="color: #000000; background-color: #fffffe; font-family: 'Consolas,;"&gt;
&lt;DIV&gt;&lt;SPAN style="color: #008080;"&gt;func(int):&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;1: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;10&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;2: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;xor&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;3: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edi&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;4: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;lock&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080;"&gt;cmpxchg&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;5: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;6: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;lock&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080;"&gt;xadd&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;7: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;add&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;8: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;ret&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Question number 1:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Is it possible that under high load another thread (thread B) might do&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;&lt;SPAN style="color: #008080;"&gt;&amp;nbsp;&amp;nbsp; lock&amp;nbsp;xadd&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&amp;nbsp;[&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;-&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;],&amp;nbsp;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;on line 5 while thread A is doing mov?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="color: #000000; background-color: #fffffe; font-family: 'Consolas,;"&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Question number 2:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="color: #000000; background-color: #fffffe; font-family: 'Consolas,;"&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Suppose I rewrite this code as follows:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="color: #000000; background-color: #fffffe; font-family: 'Consolas,;"&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;1: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;eax&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;10&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;2: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;xor&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;3: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edi&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;4: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;mov&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;ebx&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;SPAN style="color: #000000;"&gt;5: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;lock&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080;"&gt;cmpxchg&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;edx&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;6: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;lock&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080;"&gt;xadd&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;DWORD&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;PTR&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;rsp&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;ebx&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;7: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;add&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #4864aa;"&gt;ebx&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: #098658;"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;8: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff;"&gt;ret&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;now does the CPU guarantee that no other threads will lock between lines 5 and 6 or is it about whoever is faster.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Food for thought:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;lets say I am working on NUMA system and thread A executes on CPU 0&amp;nbsp; the memory region addressed in function is located on CPU4. thread B also executes same function. Is it possible that while thread A locks on line 5 and unlocks thread B will lock its line 6 before thread A can lock line 6 considering B is closer to memory region than A.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;Thanks in advance,&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;SPAN style="color: #000000;"&gt;David&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Sun, 23 Aug 2020 18:58:02 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/2-lock-instructions-in-sequence-behavior/m-p/1203239#M8146</guid>
      <dc:creator>dtsulaia</dc:creator>
      <dc:date>2020-08-23T18:58:02Z</dc:date>
    </item>
    <item>
      <title>Re: 2 lock instructions in sequence, behavior</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/2-lock-instructions-in-sequence-behavior/m-p/1203252#M8147</link>
      <description>&lt;P&gt;Having back-to-back locked instructions doesn't create a critical section containing all of these instructions. So it's possible that one or more threads modify the shared memory location between the first locked instruction and the second locked instruction. Whether that shared location is mapped to a remote NUMA node is irrelevant.&lt;/P&gt;
&lt;P&gt;If I understand your concern correctly, it seems to me that the problem you're worried about is that one thread may execute &lt;STRONG&gt;__sync_val_compare_and_swap(&amp;amp;num,10,0)&lt;/STRONG&gt;, then &lt;STRONG&gt;num &lt;/STRONG&gt;gets incremented to the maximum value by other threads, and then the thread executes &lt;STRONG&gt;__sync_add_and_fetch(&amp;amp;num,1)&lt;/STRONG&gt;&lt;SPAN style="color: #000000;"&gt;,&lt;/SPAN&gt; which causes the variable to have a value that is larger than the maximum value, which I think is 10.&lt;/P&gt;
&lt;P&gt;One way to avoid having a critical section is to use a maximum value that is a power of two, if possible, such as 16 instead of 10.&amp;nbsp; Increment &lt;STRONG&gt;num&lt;/STRONG&gt; by 2^32/2^4 instead of 1. After 16 such increments, the value rounds back to 0, so you don't have to explicitly check and set the variable to 0.&lt;/P&gt;</description>
      <pubDate>Sun, 23 Aug 2020 21:30:41 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/2-lock-instructions-in-sequence-behavior/m-p/1203252#M8147</guid>
      <dc:creator>HadiBrais</dc:creator>
      <dc:date>2020-08-23T21:30:41Z</dc:date>
    </item>
    <item>
      <title>Re: 2 lock instructions in sequence, behavior</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/2-lock-instructions-in-sequence-behavior/m-p/1203424#M8148</link>
      <description>&lt;P&gt;Your assumption about my concern is absolutely correct and solution is elegant as well, I was so focused on the technicality of it that I completely forgot I could have solved it with simple math.&lt;/P&gt;
&lt;P&gt;While we are on the topic tho, is it possible to create a critical section containing multiple instructions that will lock memory access for that section?&lt;/P&gt;
&lt;P&gt;I found _xbegin and _xend for transactions, my understanding is that everything between begin and end instructions will be committed atomically, but the memory commit operation can fail and require you to have some sort of fallback code as well. Is it possible to do it in queued style? I guess I am approaching a full blown mutex semantic here.&lt;/P&gt;
&lt;P&gt;Edit: I accidentally hit Post instead of Reply.&lt;/P&gt;</description>
      <pubDate>Mon, 24 Aug 2020 09:57:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/2-lock-instructions-in-sequence-behavior/m-p/1203424#M8148</guid>
      <dc:creator>dtsulaia</dc:creator>
      <dc:date>2020-08-24T09:57:00Z</dc:date>
    </item>
    <item>
      <title>Re: 2 lock instructions in sequence, behavior</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/2-lock-instructions-in-sequence-behavior/m-p/1203594#M8149</link>
      <description>&lt;P data-unlink="true"&gt;I think using transactional memory is a good idea in this case, but it only works on the processors that support it and on which it's enabled, taking into consideration the &lt;A title="Deep Dive: Intel® Transactional Synchronization Extensions (Intel® TSX) Asynchronous Abort" href="https://software.intel.com/security-software-guidance/insights/deep-dive-intel-transactional-synchronization-extensions-intel-tsx-asynchronous-abort" target="_self"&gt;TAA microcode update mitigation&lt;/A&gt;, which applies to, among other processors, the 2nd and 3rd generations of Intel Xeon Scalable Processors. Also, as you pointed out, it's still necessary to have a nontransactional fallback path in which a normal software lock has to be acquired.&lt;/P&gt;
&lt;P data-unlink="true"&gt;I don't understand what you mean by "queued style."&lt;/P&gt;</description>
      <pubDate>Mon, 24 Aug 2020 19:15:40 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/2-lock-instructions-in-sequence-behavior/m-p/1203594#M8149</guid>
      <dc:creator>HadiBrais</dc:creator>
      <dc:date>2020-08-24T19:15:40Z</dc:date>
    </item>
  </channel>
</rss>

