5

予約サービスに使用されるデータベース テーブルへの挿入に対するアクセス制御を実装しました。しばらくの間は問題なく動作しますが、関数は毎回sem_get()呼び出すにもかかわらず失敗します。sem_release()sem_get()

case 'room':
    $key = "room";
    $semaphore = sem_get($key, 1, 0666, 1);
    if ($semaphore) {
        sem_acquire($semaphore);
        //do some stuff
        if ($already_reserved_rooms < $max_rooms) {
            $return="ok";
            sem_release($semaphore);
            return $return;
        }
          sem_release($semaphore);
    }
    else {
      //send me mail that semaphore failed 
    }

    return 'no rooms';
    break;

私も電話sem_remove()したほうがいいですか?

このサイトの手順に従いました。

4

3 に答える 3

1

sem_get() の $key 引数は整数ですが、文字列として渡します。ftok() 呼び出しで整数キーを取得することを検討してください。

ですので交換をご検討ください

$key = "room";

次のコードに:

$project = "r"; // Project identifier. This must be a one character string.
$key = ftok(__FILE__, $project);
于 2017-04-21T20:27:47.003 に答える