C/C++ Library, mos@ua 1.0
cpplib-mos
semext.h
Go to the documentation of this file.
1
22#ifndef SEM_H
23#define SEM_H
24
25#include <sys/sem.h>
26#include "hdp.h"
27#include "dbc.h"
28
36#define semup(semid, index) \
37 ({\
38 struct sembuf op = {(unsigned short)(index), 1, 0}; \
39 MO(semop(semid, &op, 1)); \
40 })
41
49#define semdown(semid, index) \
50 ({\
51 struct sembuf op = {(unsigned short)(index), -1, 0}; \
52 MO(semop(semid, &op, 1)); \
53 })
54
68#define semdown2(semid, index1, index2) \
69 ({\
70 require (index1 != index2, "both semaphore indexes are equal!"); \
71 struct sembuf ops[2] = {{(unsigned short)(index1), -1, 0}, {(unsigned short)(index2), -1, 0}}; \
72 MO(semop(semid, ops, 2)); \
73 })
74
88#define semupdown(semid, up_index, down_index) \
89 ({\
90 require (up_index != down_index, "both semaphore indexes are equal!"); \
91 struct sembuf ops[2] = {{(unsigned short)(up_index), 1, 0}, {(unsigned short)(down_index), -1, 0}}; \
92 MO(semop(semid, ops, 2)); \
93 })
94
103#define semsetval(semid, index, value) \
104 ({\
105 union semun { \
106 int val; \
107 struct semid_ds *buf; \
108 unsigned short *array; \
109 } semopts; \
110 semopts.val = value; \
111 MO(semctl(semid, index, SETVAL, semopts)); \
112 })
113
114#endif
115
116/* ************************************************** */
120/* ************************************************** */
121
Design-by-Contract module.
Handle Defensive Programming module.