[an error occurred while processing this directive]
| void lock (volatile lock_t *l) { |
| while (test_and_set(l)) ; |
| } |
| void unlock (volatile lock_t *l) { |
| *l = 0; |
| } |
| bool cond_lock (volatile lock_t *l) { |
| if (test_and_set(l)) |
| return FALSE; //couldn't lock |
| else |
| return TRUE; //acquired lock |
| } |
| void mutex_lock (volatile lock_t *l) { |
| while (1) { |
| for (int i=0; i<MUTEX_N; i++) |
| if (!test_and_set(l)) |
| return; |
| yield(); |
| } |
| } |
| void mp_spinlock (volatile lock_t *l) { |
| cli(); // prevent local contention |
| while (test_and_set(l)) ; // lock |
| } |
| void mp_unlock (volatile lock_t *l) { |
| *l = 0; |
| sti(); |
| } |
| void rw_rdlock (volatile lock_ *l); |
| void rw_wrlock (volatile lock_ *l); |