# OS_LockMutexFrom[RToW|WToR]

## 構文

  `#include <nitro/os.h>`
  `void OS_LockMutexFromRToW( OSMutex* mutex );`
  `void OS_LockMutexFromWToR( OSMutex* mutex );`

## 引数

mutex | OSMutex 構造体へのポインタ

## 返り値

なし。

## 説明

ロックされている mutex の種類を変更します。

mutex は変更しようとしている OSMutex 構造体へのポインタです。

`OS_LockMutexFromWToR()` は write lock された mutex を read lock へ移行します。それ以降は read lock の性質を持ち、アンロックする場合も `OS_UnlockMutexR()` または `OS_UnlockMutexRW()` で行う必要があります。

`OS_LockMutexFromRToW()` は read lock された mutex を write lock へ移行します。それ以降は write lock の性質を持ち、アンロックする場合も `OS_UnlockMutexW()` または `OS_UnlockMutexRW()` で行う必要があります。

どちらの関数も成功するまで関数から戻りません。内部では、`OS_TryLockMutexFromWToR()` や `OS_TryLockMutexFromRToW()` を成功するまで呼び続けています。ただし、もともと成立しない指定だった場合(例えば、 write lock を read lock に移行する関数 `OS_LockMutexFromToWToR()` を呼んだのにもともと read lock だった) 場合はそこで停止します。(スレッドはスリープします。)

## 参照

`OS_InitMutex, OS_LockMutex, OS_UnlockMutex`
`OS_LockMutexR, OS_LockMutexW, OS_UnlocMutexR, OS_UnlocMutexW
OS_TryLockMutexR, OS_TryLockMutexW
OS_TryLockMutexFromRToW, OS_TryLockMutexFromWToR`

## 履歴

2008/12/17 初版