0

メッセージキューがいっぱいになるのを避けようとしているので、いくつか質問があります

mq_attrを使用する場合

  1. mq_curmsgsがいっぱいになるのはいつですか? 0 または max_msgs の場合
  2. 満杯になったら洗い流す必要はありますか?
  3. selectpoll、またはepollのいずれを使用することをお勧めしますか? もしそうなら、私はそれらをどのように使用しますか
4

1 に答える 1

1

(1) mq_curmsgs == mq_maxmsg がいっぱいです

(2) 続けて書き込みたい場合のみ。読んだことのないものをキューに入れる意味は何ですか? キューを読み取るのではなく、その場でキューを拡張できるかどうかを尋ねている場合は、いいえ。キューの制限は、作成時に指定されます。

(3) 何をしているかによります。キューを読み取るための代替手段は、基本的に次のようになります。

  1. mq_receiveデフォルトでブロックします。
  2. キューは、 でノンブロッキングとして開くmq_openか、 でノンブロッキングに変更できますmq_setattr。は、現在読み取るものがあるかどうかを確認するための基本的なポーリング機能を提供します。
  3. 使用できますmq_notify。これにより、(a) シグナルまたは (b)空のキューが新しいメッセージを受け取るたびにスレッドを生成するように指定できます。
  4. 使用できますmq_timedreceive。これは、キューがブロッキング モードの場合、指定した時間だけブロックします。
  5. selectmqd_t 型はファイル記述子であるため、Linux では などを使用できます。これは、他の POSIX システムには当てはまらない場合があります。 selectおよび兄弟は、キューを他の I/O イベントと多重化する機能を提供し、キューに読み取るものがあるときに通知を受けます。
于 2013-06-26T02:12:02.957 に答える