<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
Hi Guys, <div><br><div><span style="font-size: 10pt; ">I'm working on a client/server application on windows 7, where both the client and the server have a multithreaded architecture, more precisely, three threads per application, the first for receiving messages, the 2nd for analysing them and processing and the 3rd for sending answers. when I implemented this architecture, sometimes I have deadlocks, I don't know why? the code of the two threads that uses MPI is below, I think the problem is the the blocking callls, So, is there any alternatives? what I tried to do is make the whole connection session uninterruptible but i couldn't find a way to do it.</span></div></div><div><span style="font-size: 10pt; "><br></span></div><div><span style="font-size: 10pt; ">Receiver thread:</span></div><div><div>forever</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>// wait up for a new message</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>emit WriteLine("waiting for connections on <" + QString::fromStdString(myPort) + ">\n");</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>MPI_Comm_accept( myPort, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &client);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span></div><div><span class="Apple-tab-span" style="white-space:pre">             </span>MPI_Recv(&message, 1, MessageType, MPI_ANY_SOURCE, MPI_ANY_TAG, client, &status);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>DIH.InFifo.Insert(message);    <span style="font-size: 10pt; ">//insert the message into the fifo</span></div><div><span class="Apple-tab-span" style="white-space:pre">             </span>emit WriteLine("A messaage "+QString::number(message.Command, 10)+" has been received from <"+QString::fromStdString(message.portSource)+">\n");</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>//disconnect from the current client</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>MPI_Barrier(client);</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>MPI_Comm_disconnect(&client);</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div></div><div><br></div><div>Sender Thread:</div><div><div>forever </div><div><span class="Apple-tab-span" style="white-space:pre">   </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>message = DIH.OutFifo.Mov(); // to remove the message from the Fifo</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">         </span>// send a new message</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>emit WriteLine("trying to connect to <" + QString::fromStdString(message.portDest) + ">\n");</div><div><span class="Apple-tab-span" style="white-space:pre">               </span>MPI_Comm_connect(message.portDest, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &client);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">          </span>MPI_Send(&message, 1, MessageType, 0, 0, client);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>emit WriteLine("A messaage "+QString::number(message.Command, 10)+" has been sent to <"+QString::fromStdString(message.portDest)+">\n");</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>//disconnect from the current client</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>MPI_Barrier(client);</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>MPI_Comm_disconnect(&client);</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div></div>                                    </div></body>
</html>