tas.c.template
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*
  2.  * To generate tas.s using this template:
  3.  * 1. cc +O2 -S -c tas.c
  4.  * 2. edit tas.s:
  5.  * - replace the LDW with LDCWX
  6.  * For details about the LDCWX instruction, see the "Precision
  7.  * Architecture and Instruction Reference Manual" (09740-90014 of June
  8.  * 1987), p. 5-38.
  9.  */
  10. int
  11. tas(lock)
  12.     int *lock; /* LDCWX is a word instruction */
  13. {
  14.     /*
  15.      * LDCWX requires that we align the "semaphore" to a 16-byte
  16.      * boundary.  The actual datum is a single word (4 bytes).
  17.      */
  18.     lock = ((long) lock + 15) & ~15;
  19.     /*
  20.      * The LDCWX instruction atomically clears the target word and
  21.      * returns the previous value.  Hence, if the instruction returns
  22.      * 0, someone else has already acquired the lock before we tested
  23.      * it (i.e., we have failed).
  24.      *
  25.      * Notice that this means that we actually clear the word to set
  26.      * the lock and set the word to clear the lock.  This is the
  27.      * opposite behavior from the SPARC LDSTUB instruction.  For some
  28.      * reason everything that H-P does is rather baroque...
  29.      */
  30.     if (*lock) { /* this generates the LDW */
  31. return(0); /* success */
  32.     }
  33.     return(1);     /* failure */
  34. }