0

セマフォのコツをつかもうとしています。私は、セマフォを扱い、単一のセマフォを作成するこの機能を持つプログラムを作成しました。

int semcreate()
{
    semp = semget(ftok("./output.txt", 'a'),1,IPC_CREAT|IPC_EXCL|0664);

    if(semp == -1) /*Semaphore exists, fetch*/
    {
        printf("Semaphore fetched\n");
        semp = semget(ftok("./output.txt", 'a'), 1, 0);
    }
    else if(semp>=0) /*Semaphore created here*/
    {
        printf("Semaphore created\n");
        seminit(); /* Initialize semaphore*/
    }
    return 1;
}

このプログラムを 2 つの別々の端末から実行すると、両方のインスタンスが出力されますSemaphore fetched。これは正しい動作ですか?なんで?

ここに画像の説明を入力

4

1 に答える 1

0

システム上にセマフォが存在する可能性があります。コマンドipcsを使用してシステム内のすべてのセマフォを一覧表示し、 を使用してプログラムによって作成されたセマフォを削除しますipcrm

于 2013-04-08T14:32:15.060 に答える