1

私はクリティカル セクションを含むプログラムに取り組んでいるので、セマフォを使用しています。具体的には、POSIX セマフォ: http://www.kernel.org/doc/man-pages/online/pages/man3/sem_close.3.html

http://www.sbin.org/doc/glibc/libc_34.html (検索: マクロ SEM_VALUE_MAX ) によると、一般的なセマフォに設定できる最大値があります。私のシステムでは、これは約 32K です。

残念ながら、私は時間に敏感なコード(〜1MBit / sでシリアルポートを介してarduinoから読み取る)を扱っているため、実装の詳細のために、より大きなセマフォが必要です。理想的には、少なくとも 2^20 にできるようにしたいのですが、とにかく上限がある理由が少しわかりません。

この SEM_VALUE_MAX を超えて、より大きな値のセマフォを取得する方法はありますか? 私は次のことしか考えられませんでした:

  1. SEM_VALUE_MAX の再定義
    • おそらく恐ろしい考えです。それらのPOSIXの人々は彼らが何をしているかを知っていると思います
  2. セマフォが複数のデータの「チャンク」を参照するようにする
    • 現在、各 up() または down() は、単一の「チャンク」(unsigned short int) のみを取得/解放します。
    • 一度に複数の処理を行うと、デッドロックが発生する可能性があると思います。
  3. 独自のセマフォを実装しています。
    • 時間のかかる/冗長な作業
    • 携帯性が低い
  4. 素晴らしい人々にあなたの考えを聞いてください!

事前にたくさんありがとう!

4

2 に答える 2

2

セマフォを使用して、割り当てを追跡するために使用する別のカウンターへのアクセスを保護することはできませんでした。そうすれば、アクセサーよりも多くのセマフォ値は必要ありません。

于 2012-12-17T17:36:20.400 に答える
1

プログラムの移植性はどの程度必要ですか? POSIX準拠_POSIX_SEM_VALUE_MAX最小値です。SEM_VALUE_MAXより大きな値は常に許可されます。私がよく知っている glibc やその他の現実世界の実装ではSEM_VALUE_MAX、はるかに大きく定義されており、通常はINT_MAX. これについて心配する必要がある唯一の方法は、プログラムを他の POSIX システムに移植できるようにしたい場合ですSEM_VALUE_MAX

于 2012-12-17T18:24:15.157 に答える