futex.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:1k
- #ifndef _LINUX_FUTEX_H
- #define _LINUX_FUTEX_H
- /* Second argument to futex syscall */
- #define FUTEX_WAIT 0
- #define FUTEX_WAKE 1
- #define FUTEX_FD 2
- #define FUTEX_REQUEUE 3
- #define FUTEX_CMP_REQUEUE 4
- #define FUTEX_WAKE_OP 5
- long do_futex(unsigned long uaddr, int op, int val,
- unsigned long timeout, unsigned long uaddr2, int val2,
- int val3);
- #define FUTEX_OP_SET 0 /* *(int *)UADDR2 = OPARG; */
- #define FUTEX_OP_ADD 1 /* *(int *)UADDR2 += OPARG; */
- #define FUTEX_OP_OR 2 /* *(int *)UADDR2 |= OPARG; */
- #define FUTEX_OP_ANDN 3 /* *(int *)UADDR2 &= ~OPARG; */
- #define FUTEX_OP_XOR 4 /* *(int *)UADDR2 ^= OPARG; */
- #define FUTEX_OP_OPARG_SHIFT 8 /* Use (1 << OPARG) instead of OPARG. */
- #define FUTEX_OP_CMP_EQ 0 /* if (oldval == CMPARG) wake */
- #define FUTEX_OP_CMP_NE 1 /* if (oldval != CMPARG) wake */
- #define FUTEX_OP_CMP_LT 2 /* if (oldval < CMPARG) wake */
- #define FUTEX_OP_CMP_LE 3 /* if (oldval <= CMPARG) wake */
- #define FUTEX_OP_CMP_GT 4 /* if (oldval > CMPARG) wake */
- #define FUTEX_OP_CMP_GE 5 /* if (oldval >= CMPARG) wake */
- /* FUTEX_WAKE_OP will perform atomically
- int oldval = *(int *)UADDR2;
- *(int *)UADDR2 = oldval OP OPARG;
- if (oldval CMP CMPARG)
- wake UADDR2; */
- #define FUTEX_OP(op, oparg, cmp, cmparg)
- (((op & 0xf) << 28) | ((cmp & 0xf) << 24)
- | ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
- #endif