futex.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _LINUX_FUTEX_H
  2. #define _LINUX_FUTEX_H
  3. /* Second argument to futex syscall */
  4. #define FUTEX_WAIT 0
  5. #define FUTEX_WAKE 1
  6. #define FUTEX_FD 2
  7. #define FUTEX_REQUEUE 3
  8. #define FUTEX_CMP_REQUEUE 4
  9. #define FUTEX_WAKE_OP 5
  10. long do_futex(unsigned long uaddr, int op, int val,
  11. unsigned long timeout, unsigned long uaddr2, int val2,
  12. int val3);
  13. #define FUTEX_OP_SET 0 /* *(int *)UADDR2 = OPARG; */
  14. #define FUTEX_OP_ADD 1 /* *(int *)UADDR2 += OPARG; */
  15. #define FUTEX_OP_OR 2 /* *(int *)UADDR2 |= OPARG; */
  16. #define FUTEX_OP_ANDN 3 /* *(int *)UADDR2 &= ~OPARG; */
  17. #define FUTEX_OP_XOR 4 /* *(int *)UADDR2 ^= OPARG; */
  18. #define FUTEX_OP_OPARG_SHIFT 8 /* Use (1 << OPARG) instead of OPARG.  */
  19. #define FUTEX_OP_CMP_EQ 0 /* if (oldval == CMPARG) wake */
  20. #define FUTEX_OP_CMP_NE 1 /* if (oldval != CMPARG) wake */
  21. #define FUTEX_OP_CMP_LT 2 /* if (oldval < CMPARG) wake */
  22. #define FUTEX_OP_CMP_LE 3 /* if (oldval <= CMPARG) wake */
  23. #define FUTEX_OP_CMP_GT 4 /* if (oldval > CMPARG) wake */
  24. #define FUTEX_OP_CMP_GE 5 /* if (oldval >= CMPARG) wake */
  25. /* FUTEX_WAKE_OP will perform atomically
  26.    int oldval = *(int *)UADDR2;
  27.    *(int *)UADDR2 = oldval OP OPARG;
  28.    if (oldval CMP CMPARG)
  29.      wake UADDR2;  */
  30. #define FUTEX_OP(op, oparg, cmp, cmparg) 
  31.   (((op & 0xf) << 28) | ((cmp & 0xf) << 24)
  32.    | ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
  33. #endif