acquire (&rwlock->rw_spinlock);
__pthread_lock (&rwlock->rw_lock);
pthread_rwlock_rdlock (pthread_rwlock_t *rwlock){  pthread_descr self;  while (1)    {      acquire (&rwlock->rw_spinlock);      if (rwlock->rw_writer == NULL	  || (rwlock->rw_kind == PTHREAD_RWLOCK_PREFER_READER_NP	      && rwlock->rw_readers != 0))	/* We can add a reader lock.  */	break;      /* Suspend ourselves, then try again */      self = thread_self ();      enqueue (&rwlock->rw_read_waiting, self);      release (&rwlock->rw_spinlock);      suspend (self); /* This is not a cancellation point */    }  ++rwlock->rw_readers;  release (&rwlock->rw_spinlock);  return 0;}