これをチェックしてくれてありがとう。
メッセージ キュー (msqid) をチェックして、キューにメッセージがあるかどうかを確認する方法があるかどうかを知りたかったのです。なければ続けたいと思います。オンラインで見つけることができた唯一の方法は、msgrcv を IPC_NOWAIT と共に使用することですが、メッセージが見つからない場合は ENOMSG がスローされます。メッセージがなくても続けたいです。
私のコードは、投稿して誇りに思うにはあまりにも雑然としているので、私が実現したいことのいくつかの疑似コードを投稿します。
Main()
{
Initialize queues;
Initialize threads // 4 clients and 1 server
pthread_exit(NULL);
}
Server()
{
while (1)
{
check release queue; // Don't want to wait
if ( release )
increase available;
else
// Do nothing and continue
Check backup queue; // Don't want to wait
if ( backup)
read backup;
else
read from primary queue; // Will wait for message
if ( readMessage.count > available )
send message to backup queue;
else
send message to client with resources;
decrease available;
} //Exit the loop
}
Client
{
while(1)
{
Create a message;
Send message to server, requesting an int;
Wait for message;
// Do some stuff
Send message back to server, releasing int;
} // Exit the loop
}
typedef struct {
long to;
long from;
int count;
} request;
私が知る限り、無期限に待機するか、待機せずにチェックして何もない場合はクラッシュすることができます。待たずにキューを確認して続行したいだけです。
あなたが与えることができるすべての助けに感謝します!どうもありがとうございました!