実際には、セマフォロックすると、別のプロセスが同じセマフォ(キーが同じ)をロックしようとしても待機状態になります。
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <string.h>
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
struct sembuf sembuff; // セマフォバッファ
memset(&sembuff,'\0',sizeof(sembuff));
try
{
/* セマフォキー値 OSで一意の値です */
long lnSemKey = 0x0000ffff;
errno=0;
int iSemId = semget(lnSemKey,1,(0666));
if(iSemId < 0)
{
throw -1;
}
sembuff.sem_num = 0;
sembuff.sem_op = -1;
sembuff.sem_flg = SEM_UNDO;
errno=0;
//ロックします。
while(semop(iSemId,&sembuff,1) < 0)
{
if(errno != EINTR)
{
throw -1;
}
}
}
catch(int r)
{
return(r);
}
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
良かったらクリックお願いします→
