%semop() function

The %semop() function performs an array of semaphore operations on a set of semaphores.

For Windows: Not Supported


code = %semop(sem-ID, sops, num)


sem-ID Semaphore identifier returned by a call to %semget().
sops Array of semaphores operation. sops is a number by 3 two-dimensional arrays. Each row in the array is the equivalent of a sops structure, as defined in the UNIX system documentation. In other words, sops ( i ,1) is sem_num, sops ( i ,2) is sem_op, sops ( i ,3) is sem_flg. See the UNIX system documentation for the description of these fields.
num Number of rows in the sops array.
Note: The elements of the sops array are integers, instead of short integers, as the regular libc.a call.


include dm,bp,unix.h ipc.h
include dm,bp,unix.h sem.h
include dm,bp,unix.h mode.h
* Get a set of 4 semaphores
sem-ID=semget(key, 4, ipc$creat)
if sem-ID<0 then
   crt "semget error=":system(0)
* Wait for: (1st sem >=1) and (2nd sem >=2)
dim sops(2,3)
* - Set 1st condition
sops(1,1)=0 ;* 1st sem
sops(1,2)=-1 ;* Wait until can do -1
sops(1,3)=0 ;* No flag
* - Set 2nd condition
sops(1,1)=1 ;* 2nd sem
sops(1,2)=-2 ;* Wait until can do -2
sops(1,3)=0 ;* No flag
n=semop(sem-ID, sops, 2)
if n<0 then
   crt "semop error=":system(0)