Copyright (C) 2000-2012 |
GNU Info (ipc.info)SemaphoresSemaphores ========== Each semaphore has a value >= 0. An id provides access to an array of `nsems' semaphores. Operations such as read, increment or decrement semaphores in a set are performed by the `semop' call which processes `nsops' operations at a time. Each operation is specified in a struct `sembuf' described below. The operations are applied only if all of them succeed. If you do not have a need for such arrays, you are probably better off using the `test_bit', `set_bit' and `clear_bit' bit-operations defined in <asm/bitops.h>. Semaphore operations may also be qualified by a SEM_UNDO flag which results in the operation being undone when the process exits. If a decrement cannot go through, a process will be put to sleep on a queue waiting for the `semval' to increase unless it specifies IPC_NOWAIT. A read operation can similarly result in a sleep on a queue waiting for `semval' to become 0. (Actually there are two queues per semaphore array). A semaphore array is described by: struct semid_ds struct ipc_perm sem_perm; time_t sem_otime; /* last semop time */ time_t sem_ctime; /* last change time */ struct wait_queue *eventn; /* wait for a semval to increase */ struct wait_queue *eventz; /* wait for a semval to become 0 */ struct sem_undo *undo; /* undo entries */ ushort sem_nsems; /* no. of semaphores in array */ Each semaphore is described internally by : struct sem short sempid; /* pid of last semop() */ ushort semval; /* current value */ ushort semncnt; /* num procs awaiting increase in semval */ ushort semzcnt; /* num procs awaiting semval = 0 */ automatically generated by info2www version 1.2.2.9 |