

#include <nitro/os.h>BOOL OS_TryLockMutexFromRToW( OSMutex* mutex );BOOL OS_TryLockMutexFromWToR( OSMutex* mutex );| mutex | OSMutex 構造体へのポインタ |
mutex のロックを正しく read lock から write lock へ、あるいは write lock から read lock へ移行できた場合は TRUE を、そうでない場合は FALSE を返します。
ロックされている mutex の種類を変更します。
mutex は変更しようとしている OSMutex 構造体へのポインタです。
OS_TryLockMutexFromWToR() は write lock された mutex を read lock へ移行しようとします。成功すると、それ以降は read lock の性質を持ち、アンロックする場合も
OS_UnlockMutexR() または OS_UnlockMutexRW() で行う必要があります。
OS_TryLockMutexFromRToW() は read lock された mutex を write lock へ移行します。成功すると、それ以降は write lock の性質を持ち、アンロックする場合も
OS_UnlockMutexW() または OS_UnlockMutexRW() で行う必要があります。
mutex が、多段にロックされていたり、種類が正しくない場合は失敗となり、FALSE を返します。多段にロックされるというのは、複数のスレッドからロックされていたり、同じスレッドであっても同じ OSMutex 構造体に対し二重以上にロックの関数を呼んでいる場合です。種類が正しくないというのは、例えば、read
lock から write lock に移行しようとしているのに、read lock のミューテックスではないような場合です。
(例1)
OSMutex mutex;
OS_LockMutexR( &mutex );
OS_LockMutexR( &mutex );
if ( OS_TryLockMutexFromRToW( &mutex ) == FALSE ) ← mutex が多段にロックされているので FALSE を返します。
{
:
}
(例2)
OSMutex mutex;
OS_LockMutexR( &mutex );
if ( OS_TryLockMutexFromWToR( &mutex ) == FALSE ) ← read lock なのに "FromWToR" なので FALSE を返します。
{
:
}
成功であっても失敗であっても、本関数からはすぐに戻ります。 スレッドの切り替わりが発生することはありません。
OS_InitMutex, OS_LockMutex, OS_UnlockMutex
OS_LockMutexR, OS_LockMutexW, OS_UnlocMutexR, OS_UnlocMutexW
OS_TryLockMutexR, OS_TryLockMutexW
OS_LockMutexFromRToW, OS_LockMutexFromWToR
2008/12/16 初版