2007年12月14日

セマフォ生成(C++)

プロセス間同期処理に使用するセマフォを生成の処理サンプルです。同期を行うには、この他にロック、アンロック、削除の処理が必要になりますが、それは追々載せますね。


#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <string.h>

int main(char** argv, int argc)
{
try
{
/* セマフォキー値 OSで一意の値です */
long lnSemKey = 0x0000ffff;
errno=0;

/* セマフォ生成 */
int iSemId = semget(lnSemKey,1,(0666|IPC_CREAT|IPC_EXCL));
if(iSemId < 0)
{
throw -1;
}

/* セマフォ構造体 */
union semun
{
int val;
struct semid_ds *buf;
ushort *array;
}arg;

//初期セマフォ数の設定
arg.val = 1;
errno=0;
if((semctl(iSemId,0,SETVAL,arg)) < 0)
{
throw -1;
}
}
catch(int r)
{
return(r);
}
return(0);
}


実行して、ipcsコマンドで確認しますと、↓になります。keyが0x0000ffffのセマフォを生成しました。

[root@localhost ttt]# ipcs -s

------ Semaphore Arrays --------
key semid owner perms nsems
0x4d0014cc 0 work 600 8
0x00000000 65537 nobody 600 1
0x00000000 98306 nobody 600 1
0x00000000 131075 nobody 600 1
0x0000ffff 163844 root 666 1
posted by 台北猫々 at 22:45| Comment(0) | TrackBack(0) | 技術メモ(Linux C/C++)
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/8267621

この記事へのトラックバック