OS_TryLockMutexFrom[RToW|WToR]

構文

#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 初版