[Ace-users] [ace-users] ACE_RW_Process_Mutex

Douglas C. Schmidt schmidt at dre.vanderbilt.edu
Mon Mar 3 08:14:08 CST 2008


Hi,

        Thanks for using the PRF.

>ACE VERSION: 5.5.8
>
>HOST MACHINE and OPERATING SYSTEM:
>
>
>
>Windows XP Professional and Enterprise Linux 5.0
>
>Version 2002
>
>TARGET MACHINE and OPERATING SYSTEM, if different from HOST:NO
>
>COMPILER NAME AND VERSION (AND PATCHLEVEL):
>
>Visual studio 2005
>
>THE $ACE_ROOT/ace/config.h FILE
>
>#include "ace/config-win32.h"   for windows
>
>#include "ace/config-linux.h"   for linux
>
>DOES THE PROBLEM AFFECT:
>
>        COMPILATION?   NO
>
>        LINKING?       NO
>
>        EXECUTION?     YES
>
>        OTHER
>
>    SYNOPSIS:
>
>Use of ACE_RW_Process_Mutex.I developed a very simple program which needs to
>be extended for Multiple readers and single writer ( shared memory concept
>using a Hash Map with allocator)
>
>Even a single Reader and single writer are not getting
>syncronized.Pleaseprovide with a sample program of
>ACE_RW_Process_Mutex.

Have you tried running this using ACE_Process_Mutex instead of
ACE_RW_Process_Mutex to see what happens?

Thanks,

        Doug

>
>
>DESCRIPTION:
>
>After having a look into ACE_ROOT/examples/Threads ,I implemented the
>following code using ACE_RW_Process_Mutex. and run in both Windows and
>linux5.0. But in both the cases the synchronization is not happening .
>
>
>
>The Code is written as below
>
>
>
>
>
>int ACE_TMAIN (int argc, ACE_TCHAR *argv[])
>
>{
>
>    ACE_RW_Process_Mutex m_RWMutex(ACE_TEXT("MyMutex"));
>
>    if (agrc == 1)
>
>    {
>
>        while (1)
>
>        {
>
>            if (m_RWMutex.acquire_write() == 0)
>
>            {
>
>                ACE_OS::printf("Writer acquired...\n");
>
>                ACE_OS::sleep(2);
>
>                ACE_OS::printf("Writer releasing...\n");
>
>                m_RWMutex.release();
>
>            }
>
>        }
>
>    }
>
>    else
>
>    {
>
>        while (1)
>
>        {
>
>            if (m_RWMutex.acquire_read() == 0)
>
>            {
>
>                ACE_OS::printf("Writer acquired...\n");
>
>                ACE_OS::sleep(2);
>
>                ACE_OS::printf("Writer releasing...\n");
>
>                m_RWMutex.release();
>
>            }
>
>        }
>
>    }
>
>    return 0;
>
>}
>
>------=_Part_5765_23997741.1204541871901
>Content-Type: text/html; charset=ISO-8859-1
>Content-Transfer-Encoding: 7bit
>Content-Disposition: inline
>
><pre><font size="2">To: </font><a href="mailto:ace-bugs at cs.wustl.edu" target="_blank"><font size="2">ace-bugs at cs.wustl.edu</font></a></pre>
><div><font size="2">Please Ignore my previous mail ,the code was not complete.</font></div>
><div><font size="2">Subject: ACE_RW_Process_Mutex in single writer and multiple readers</font></div><pre><font size="2">ACE VERSION: 5.5.8</font></pre><pre><font size="2">HOST MACHINE and OPERATING SYSTEM:</font></pre><pre>
><font size="2">&nbsp;</font></pre><pre><font size="2">Windows XP Professional and Enterprise Linux 5.0</font></pre><pre><font size="2">Version 2002</font></pre><pre><font size="2">TARGET MACHINE and OPERATING SYSTEM, if different from HOST:NO</font></pre>
><pre><font size="2">COMPILER NAME AND VERSION (AND PATCHLEVEL):</font></pre><pre><font size="2">Visual studio 2005</font></pre>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">THE $ACE_ROOT/ace/config.h FILE </span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">#include &quot;ace/config-win32.h&quot;<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>for windows</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">#include &quot;ace/config-linux.h&quot;<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>for linux</span></p><pre>
><font size="2">DOES THE PROBLEM AFFECT:</font></pre><pre><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMPILATION? &nbsp; NO</font></pre><pre><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LINKING?&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; NO</font></pre><pre><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXECUTION?&nbsp;&nbsp;&nbsp;&nbsp; YES</font></pre>
><pre><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OTHER &nbsp;</font></pre><pre><font size="2">&nbsp;&nbsp;&nbsp; SYNOPSIS:</font></pre>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">Use of ACE_RW_Process_Mutex.I developed a very simple program which needs to be extended for Multiple readers and single writer ( shared memory concept using a Hash Map with allocator)</span></p>
>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">Even a single Reader and single writer are not getting syncronized.Please provide with a sample program of ACE_RW_Process_Mutex.</span></p>
>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;</span></p><pre><font size="2">DESCRIPTION:</font></pre><pre><font size="2">After having a look into ACE_ROOT/examples/Threads ,I implemented the following code using ACE_RW_Process_Mutex. and run in both Windows and linux5.0. But in both the cases the synchronization is not happening .</font></pre>
><pre><font size="2">&nbsp;</font></pre><pre><font size="2">The Code is written as below</font></pre><pre><span style="FONT-FAMILY: Arial"><font size="2">&nbsp;</font></span></pre><pre><font size="2">&nbsp;</font></pre>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">int ACE_TMAIN (int argc, ACE_TCHAR *argv[])</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">{</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp; ACE_RW_Process_Mutex m_RWMutex(ACE_TEXT(&quot;MyMutex&quot;));</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp; if (agrc == 1)</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp; {</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (1)</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_RWMutex.acquire_write() == 0)</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::printf(&quot;Writer acquired...\n&quot;);</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::sleep(2);</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::printf(&quot;Writer releasing...\n&quot;);</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_RWMutex.release();</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp; }</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp; else</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp; {</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (1)</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_RWMutex.acquire_read() == 0)</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::printf(&quot;Writer acquired...\n&quot;);</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::sleep(2);</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::printf(&quot;Writer releasing...\n&quot;);</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_RWMutex.release();</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp; }</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">&nbsp;&nbsp;&nbsp; return 0;</span></p>
><p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: &#39;Courier New&#39;">}</span></p><pre><br style="mso-special-character: line-break"></pre>
>
>------=_Part_5765_23997741.1204541871901--
>


-- 
Dr. Douglas C. Schmidt                       Professor and Associate Chair
Electrical Engineering and Computer Science  TEL: (615) 343-8197
Vanderbilt University                        WEB: www.dre.vanderbilt.edu/~schmidt
Nashville, TN 37203                          NET: d.schmidt at vanderbilt.edu



More information about the Ace-users mailing list