• 検索結果がありません。

ミューテックス

ドキュメント内 px100.book (ページ 66-71)

第 3 章 従来機能の変更 25

3.5 拡張同期・通信機能

3.5.1 ミューテックス

ミューテックス機能には,アクセス許可ベクタを指定してミューテックスを生 成する機能と,ミューテックスのアクセス許可ベクタを変更する機能を追加す る.また,参照できるミューテックス状態に追加がある.

ミューテックスをロック解除するサービスコール( unl_mtx)は,ミューテッ クスをロックしたタスクのみが呼び出すことができる.そのため,アクセス許 可ベクタによる保護を行わない.

ミューテックス状態のパケット形式に,アクセス許可ベクタを追加する.

typedef struct t_rmtx {

ID htskid ; /* ミューテックスをロックしているタ

スクの ID番号  */

ID wtskid ; /* ミューテックスの待ち行列の先頭の

タスクの ID番号  */

ACVCT acvct ; /* ミューテックスのアクセス許可ベク

タ  */

/* 実装独自に他のフィールドを追加してもよい  */

} T_RMTX ;

ミューテックス機能の新規サービスコールの機能コードは次の通りである.

TFN_CRA_MTX –0x116 cra_mtxの機能コード TFN_ACRA_MTX –0x126 acra_mtxの機能コード TFN_SAC_MTX –0x136 sac_mtxの機能コード

CRA_MTX

ミューテックスの生成(静的 API,アクセス許可指定)

cra_mtx

ミューテックスの生成(アクセス許可指定)

acra_mtx

ミューテックスの生成(ID番号自動割付け,アクセス許可指定)

【静的 API】

CRA_MTX ( ID mtxid, { ATR mtxatr, PRI ceilpri }, ACVCT acvct ) ;

【 C言語 API】

ER ercd = cra_mtx ( ID mtxid, T_CMTX *pk_cmtx, ACVCT *p_acvct ) ;

ER_ID mtxid = acra_mtx ( T_CMTX *pk_cmtx, ACVCT *p_acvct ) ;

【パラメータ】

ID mtxid 生成対象のミューテックスの ID番号

T_CMTX * pk_cmtx ミューテックス生成情報を入れたパケットへ

のポインタ(静的 APIではパケットの内容を直 接記述する)

ACVCT acvct ミューテックスのアクセス許可ベクタ

pk_cmtxの内容( T_CMTX型)

ATR mtxatr ミューテックス属性

PRI ceilpri ミューテックスの上限優先度

(実装独自に他の情報を追加してもよい)

【リターンパラメータ】

cra_mtxの場合

ER ercd 正常終了( E_OK)またはエラーコード acra_mtxの場合

ER_ID mtxid 生成したミューテックスの ID番号(正の値)ま

たはエラーコード

【エラーコード】

E_ID 不正 ID番号( mtxidが不正あるいは使用できない)

E_NOID ID番号不足(割付け可能なミューテックス IDがない)

E_RSATR 予約属性( mtxatrが不正あるいは使用できない)

E_PAR パラメータエラー( pk_cmtx, ceilpri, p_acvct, acvct が不正)

E_OBJ オブジェクト状態エラー(対象ミューテックスが登録済

み)

【機能】

mtxidで指定される ID番号を持つミューテックスを, pk_cmtxで指定される ミューテッ クス生成情 報に基づい て生成する. CRE_MTX / cre_mtx/

acre_mtxとの違いは,生成するミューテックスに,acvctで指定されるアクセ ス許可ベクタを設定することのみである.

sac_mtx

ミューテックスのアクセス許可ベクタの変更

【 C言語 API】

ER ercd = sac_mtx ( ID mtxid, ACVCT *p_acvct ) ;

【パラメータ】

ID mtxid 変更対象のミューテックスの ID番号

ACVCT acvct ミューテックスのアクセス許可ベクタ

【リターンパラメータ】

ER ercd 正常終了( E_OK)またはエラーコード

【エラーコード】

E_ID 不正 ID番号( mtxidが不正あるいは使用できない)

E_PAR パラメータエラー( p_acvct, acvctが不正)

E_NOEXS オブジェクト未生成(対象ミューテックスが未登録)

【機能】

mtxidで指定されるミューテックスに対するアクセス許可ベクタを, acvctで

指定されるアクセス許可ベクタに設定する.

【補足説明】

このサービスコールは,呼び出された時点ですでにミューテックスの待ち行列 につながれているタスクには影響しない.そのため,ミューテックスの待ち行 列につながれているタスクが,新たに設定したアクセス許可ベクタではミュー テックスをロックすることを許可されていない場合でも,そのタスクはミュー テックスのロック待ち状態のままとなり,ミューテックスがロック解除されれ ば,ミューテックスをロックすることができる.

ref_mtx

ミューテックスの状態参照

【 C言語 API】

ER ercd = ref_mtx ( ID mtxid, T_RMTX *pk_rmtx ) ;

【パラメータ】

ID mtxid 状態参照対象のミューテックスの ID番号

T_RMTX * pk_rmtx ミューテックス状態を返すパケットへのポイ

ンタ

【リターンパラメータ】

ER ercd 正常終了( E_OK)またはエラーコード pk_rmtxの内容( T_RMTX型)

ID htskid ミューテックスをロックしているタスクの ID

番号

ID wtskid ミューテックスの待ち行列の先頭のタスクの

ID番号

ACVCT acvct ミューテックスのアクセス許可ベクタ

(実装独自に他の情報を追加してもよい)

【エラーコード】

E_ID 不正 ID番号( mtxidが不正あるいは使用できない)

E_PAR パラメータエラー( pk_rmtxが不正)

E_NOEXS オブジェクト未生成(対象ミューテックスが未登録)

【機能】

mtxidで指定されるミューテックスに関する状態を参照し, pk_rmtxで指定さ れるパケットに返す. µITRON4.0仕様との違いは, acvctに対象ミューテック スのアクセス許可ベクタを返すことのみである.

ドキュメント内 px100.book (ページ 66-71)