'세마포어'에 해당되는 글 1건

  1. 2010.01.22 세마포어

세마포어

|

#include <sys/sem.h>
int semctl (int semid, int semnum, int cmd, ...);
int semget (key_t key, int nsems, int semflg);
int semop(int semid, struct sembuf *sops, size_t nsops);


==== semget ====
Mode bits:
   IPC_CREATE : create entry if key does not exist
   IPC_EXCL     : key가 존재시 실패
   IPC_NOWAIT  : 요청이 wait해야하는 경우 실패함
Keys:
   IPC_PRIVATE : private key.
control commands:
   IPC_RMID      : identifier를 삭제
   IPC_SET        : set option
   IPC_STAT      : get option


// semctl에서 사용하기위해서 application에서 직접 선언해야함 (standard header파일에는 존재하지 않음)
union semun {
    int val;
    struct semid_ds *buf;
    unsigned short  *array;
} arg;

/* Structure used for argument to `semop' to describe operations.  */
struct sembuf
{
  unsigned short int sem_num;   /* semaphore number */
  short int sem_op;     /* semaphore operation */
  short int sem_flg;        /* operation flag */
};

 

/* Flags for `semop'.  */
#define SEM_UNDO    0x1000      /* undo the operation on exit */
IPC_NOWAIT                             /* semaphore를 얻는데 실패해도 wait하지 않는다 */

/* Commands for `semctl'.  */
#define GETPID      11      /* get sempid */
#define GETVAL      12      /* get semval */
#define GETALL      13      /* get all semval's */
#define GETNCNT     14      /* get semncnt */
#define GETZCNT     15      /* get semzcnt */
#define SETVAL      16      /* set semval */
#define SETALL      17      /* set all semval's */


/* Data structure describing a set of semaphores.  */
struct semid_ds
{
  struct ipc_perm sem_perm;     /* operation permission struct */
  __time_t sem_otime;           /* last semop() time */
  unsigned long int __unused1;
  __time_t sem_ctime;           /* last time changed by semctl() */
  unsigned long int __unused2;
  unsigned long int sem_nsems;      /* number of semaphores in set */
  unsigned long int __unused3;
  unsigned long int __unused4;
};


structure ipc_perm
{
  uid_t    uid    //Owner's user ID. 
    gid_t    gid   //
Owner's group ID. 
    uid_t    cuid  //
Creator's user ID. 
    gid_t    cgid  //
Creator's group ID. 
    mode_t   mode  //
Read/write permission.
}

And
prev | 1 | next