Changeset 08a19ba in mainline for kernel/generic/src/synch/mutex.c
- Timestamp:
- 2008-06-23T18:44:48Z (15 years ago)
- Branches:
- lfn, master, serial
- Children:
- 1a1744e
- Parents:
- deaf8d5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/synch/mutex.c
rdeaf8d5 r08a19ba 39 39 #include <synch/semaphore.h> 40 40 #include <synch/synch.h> 41 #include <debug.h> 41 42 42 /** Initialize mutex 43 /** Initialize mutex. 43 44 * 44 * Initialize mutex. 45 * 46 * @param mtx Mutex. 45 * @param mtx Mutex. 46 * @param type Type of the mutex. 47 47 */ 48 void mutex_initialize(mutex_t *mtx )48 void mutex_initialize(mutex_t *mtx, mutex_type_t type) 49 49 { 50 mtx->type = type; 50 51 semaphore_initialize(&mtx->sem, 1); 51 52 } 52 53 53 /** Acquire mutex 54 /** Acquire mutex. 54 55 * 55 * Acquire mutex.56 56 * Timeout mode and non-blocking mode can be requested. 57 57 * 58 * @param mtx 59 * @param usec 60 * @param flags 58 * @param mtx Mutex. 59 * @param usec Timeout in microseconds. 60 * @param flags Specify mode of operation. 61 61 * 62 62 * For exact description of possible combinations of 63 63 * usec and flags, see comment for waitq_sleep_timeout(). 64 64 * 65 * @return 65 * @return See comment for waitq_sleep_timeout(). 66 66 */ 67 67 int _mutex_lock_timeout(mutex_t *mtx, uint32_t usec, int flags) 68 68 { 69 return _semaphore_down_timeout(&mtx->sem, usec, flags); 69 int rc; 70 71 if (mtx->type == MUTEX_PASSIVE) { 72 rc = _semaphore_down_timeout(&mtx->sem, usec, flags); 73 } else { 74 ASSERT(mtx->type == MUTEX_ACTIVE); 75 ASSERT(usec == SYNCH_NO_TIMEOUT); 76 ASSERT(!(flags & SYNCH_FLAGS_INTERRUPTIBLE)); 77 do { 78 rc = semaphore_trydown(&mtx->sem); 79 } while (SYNCH_FAILED(rc) && 80 !(flags & SYNCH_FLAGS_NON_BLOCKING)); 81 } 82 83 return rc; 70 84 } 71 85 72 /** Release mutex 86 /** Release mutex. 73 87 * 74 * Release mutex. 75 * 76 * @param mtx Mutex. 88 * @param mtx Mutex. 77 89 */ 78 90 void mutex_unlock(mutex_t *mtx)
Note: See TracChangeset
for help on using the changeset viewer.