<div><font color="#550055" size="1">ACE VERSION: 5.5.8<br><br>HOST MACHINE and OPERATING SYSTEM:<br>Windows XP Professional and Enterprise Linux 5.0<br><br>Version 2002<br><br>TARGET MACHINE and OPERATING SYSTEM, if different from HOST:NO<br>
<br>COMPILER NAME AND VERSION (AND PATCHLEVEL):<br><br>Visual studio 2005<br><br>THE $ACE_ROOT/ace/config.h FILE<br><br>#include &quot;ace/config-win32.h&quot; &nbsp; for windows<br><br>#include &quot;ace/config-linux.h&quot; &nbsp; for linux<br>
<br>DOES THE PROBLEM AFFECT:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;COMPILATION? &nbsp; NO<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LINKING? &nbsp; &nbsp; &nbsp; NO<br><br>&nbsp;&nbsp;&nbsp;EXECUTION? &nbsp; &nbsp; YES<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OTHER<br><br>&nbsp;&nbsp;&nbsp;SYNOPSIS:<br><br>Use of ACE_RW_Process_Mutex.I developed a very simple program which needs to be<br>
extended for Multiple readers and single writer ( shared memory concept<br>using a Hash Map with allocator)<br><br>Even a single Reader and single writer are not getting in sync.<br>&nbsp;</font></div>
<div style="DIRECTION: ltr">
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt"><font size="1">I am attaching a code and description of the output and the problem.</font></span></p>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt"><font size="1"></font></span>&nbsp;</p>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 10pt"><font size="1">DESCRIPTION.</font></span></p></div>
<div><font size="1">I also tried it using ACE_Process_Mutex by just replacing the <font style="BACKGROUND-COLOR: #33ccff">ACE_RW_Process_Mutex</font> in code by ACE_Process_Mutex .With ACE_Process_Mutex ,synchronization is proper and writer and reader are acquiring and releasing in correct order .(when writer is releasing, then only reader is acquiring and vice versa. The output for the same is in last of the mail).<br>
<br>BUT when using ACE_RW_Process_Mutex ,the writer and reader are not in sync.<br><br>If we see the output for this as mentioned below, writer has acquired the mutex at <br><br>88112592 millisec and released at 88114592 millisec i..e writer is working for 2 sec and has acquired mutex for 2 sec.<span></span> <br>
<br></font><font size="1"><font style="BACKGROUND-COLOR: #ffff66">(writer acquired&nbsp;&nbsp;&nbsp; 1&nbsp; &nbsp; at&nbsp;&nbsp; 88112592<br><br>&nbsp;writer released&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; at&nbsp;&nbsp; 88114592)<br></font><br>Now when we see the Reader, it has acquired the mutex at 88112872 millisec.<br>
<br></font><font size="1"><font style="BACKGROUND-COLOR: #33ff33">(Reader acquired&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88112872<br><br>Reader released&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88114872)<br></font><br>This should ideally not happen as mutex is still with the writer and it is relasing at 88114592 millisec.</font><span><br>
<br><font size="1">&nbsp;int ACE_TMAIN (int argc, ACE_TCHAR *argv[])<br><br><br>{<br><br></font></span><span><font size="1">int count =0;<br><br>float ltime=0;<br><br></font></span><span><font size="1">&nbsp;&nbsp;&nbsp; <font style="BACKGROUND-COLOR: #33ccff">ACE_RW_Process_Mutex</font> m_RWMutex(ACE_TEXT(&quot;MyMutex&quot;));<br>
<br></font></span><span><font size="1">&nbsp;&nbsp;&nbsp; if (agrc == 1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // For server which is writing<br><br>&nbsp;&nbsp;&nbsp; {<br><br></font></span><font size="1"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (1)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_RWMutex.acquire_write() == 0)<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br><br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ltime = ::GetTickCount();&nbsp; //number of millisec since the system has started<span></span> </font><span><br><br><font size="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::printf(&quot;Writer acquired...%d&nbsp; at: %f\n&quot;,count++,ltime);<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::sleep(2);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ltime = ::GetTickCount();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::printf(&quot;Writer releasing... ...%d&nbsp; at: %f\n&quot;,count++,ltime);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_RWMutex.release();<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //For Client which is reading <br><br>&nbsp;&nbsp;&nbsp; {<br><br></font></span><span><font size="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (1)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_RWMutex.acquire_read() == 0)<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br><br></font></span><span><font size="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ltime = ::GetTickCount(); <br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; ACE_OS::printf(&quot;Reader acquired... ...%d&nbsp; at: %f\n&quot;,count++,ltime);<span></span> <br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::sleep(2);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ltime = ::GetTickCount();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_OS::printf(&quot;Reader releasing...%d&nbsp; at: %f\n&quot;,count++,ltime);<br><br></font></span><font size="1"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_RWMutex.release();<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; return 0;<br><br>}</span> </font></div>
<div><font size="1">&nbsp;</font></div>
<div><font size="1">OUTPUT&nbsp;&nbsp;is like this(WITH ACE_RW_Process_Mutex):<br>&nbsp;<br><br><br>Writer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimeStamp(in millisec)&nbsp;</font><span><br><br><br><font size="1">writer acquired&nbsp;&nbsp;&nbsp; 0 &nbsp;&nbsp; at&nbsp;&nbsp; 88110592&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
<br>writer released&nbsp;&nbsp;&nbsp; 0 &nbsp;&nbsp; at&nbsp;&nbsp; 88112592<br><br></font><font size="1"><font style="BACKGROUND-COLOR: #ffff00">writer acquired&nbsp;&nbsp;&nbsp; 1&nbsp; &nbsp; at&nbsp;&nbsp; 88112592<br><br>writer released&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; at&nbsp;&nbsp; 88114592<br></font><br>writer acquired&nbsp;&nbsp;&nbsp; 2&nbsp; &nbsp; at&nbsp;&nbsp; 88114592<br>
<br>writer released&nbsp;&nbsp;&nbsp; 2&nbsp; &nbsp; at&nbsp;&nbsp; 88116592<br><br>writer acquired&nbsp;&nbsp;&nbsp; 3 &nbsp;&nbsp; at&nbsp;&nbsp; 88116592<br><br>writer released &nbsp;&nbsp;&nbsp;3 &nbsp;&nbsp; at&nbsp;&nbsp; 88118592<br><br>&nbsp;<br><br>Reader<br><br></font><font size="1"><font style="BACKGROUND-COLOR: #33ff33">Reader acquired&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88112872<br>
<br>Reader released&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88114872<br></font><br>Reader acquired&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88114872<br><br>Reader released&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88116872<br><br>Reader acquired&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88116872<span></span> <br><br>Reader released&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88118872<br>
<br>Reader acquired&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88118872<br><br>&nbsp;<br><br>&nbsp;<br><br></font></span><font size="1">OUTPUT is like this (WITH ACE_Process_Mutex):<br><br>&nbsp;<br><br>Writer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimeStamp(in millisec)</font><span><br>
<br><font size="1">&nbsp;<br><br></font><font size="1"><font style="BACKGROUND-COLOR: #ffff00">writer acquired&nbsp;&nbsp;&nbsp; 0 &nbsp;&nbsp; at&nbsp;&nbsp;&nbsp; 88560984<br><br>writer released&nbsp;&nbsp;&nbsp; 0 &nbsp;&nbsp; at&nbsp;&nbsp; 88562984<br><br></font>writer acquired&nbsp;&nbsp;&nbsp; 1&nbsp; &nbsp; at&nbsp;&nbsp; 88562984<br>
<br>writer released&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; at&nbsp;&nbsp; 88564984<br><br>writer acquired&nbsp;&nbsp;&nbsp; 2&nbsp; &nbsp; at&nbsp;&nbsp; 88566984<br><br>writer released&nbsp;&nbsp;&nbsp; 2&nbsp; &nbsp; at &nbsp;&nbsp;88568984<br><br>writer acquired&nbsp;&nbsp;&nbsp; 3 &nbsp;&nbsp; at&nbsp;&nbsp; 88570984<br><br>writer released&nbsp;&nbsp;&nbsp; 3 &nbsp;&nbsp; at&nbsp;&nbsp; 88572984<span></span> <br>
<br>&nbsp;<br><br>Reader<br><br></font><font size="1"><font style="BACKGROUND-COLOR: #33ff33">Reader acquired&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88564984<br><br>Reader released&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88566984<br></font><br>Reader acquired&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88568984<br>
<br>Reader released&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88570984<br><br>Reader acquired&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88572984<br><br>Reader released&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88574984<br><br>Reader acquired&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88576984<br><br>Reader released&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; 88578984<br>
<br>&nbsp;<br><br></font></span><font size="1">Thanks<br></font><span><br><font size="1">Kul</font></span><span><br></span></div><br><br>
<div><span class="gmail_quote">On 3/3/08, <b class="gmail_sendername">Matthew Gillen</b> &lt;<a href="mailto:mgillen@bbn.com">mgillen@bbn.com</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">kul gupta wrote:<br>&gt; After having a look into ACE_ROOT/examples/Threads ,I implemented the<br>&gt; following code using ACE_RW_Process_Mutex. and run in both Windows and<br>
&gt; linux5.0. But in both the cases the synchronization is not happening .<br><br>It would help if were more specific about what actually /is/ happening.&nbsp;&nbsp;Do<br>you see the output messages in the wrong order?&nbsp;&nbsp;Do you never see some<br>
output messages?<br><br>Matt<br></blockquote></div><br>