tinykernel
読み取り中…
検索中…
一致する文字列を見つけられません
tk::Semaphore クラス

計数セマフォ (Counting Semaphore) / バイナリセマフォ [詳解]

#include <sync.hpp>

公開メンバ関数

 Semaphore (int32_t initial_count=1, int32_t max_count=1)
 セマフォを初期化します
void acquire ()
 資源を獲得するまで現在のタスクをブロックします
bool try_acquire ()
 資源の獲得を試みます (ノンブロッキング)
void release ()
 資源を返却し、待機中タスクがあれば最優先度のタスクを 1 つ起床させます
int32_t count () const

詳解

計数セマフォ (Counting Semaphore) / バイナリセマフォ

資源の獲得・返却によるタスク間同期を行います。資源がない場合はタスクが State::Blocked に遷移して休止し、返却時に優先度の高いタスクから順に起床します。

tk::Semaphore sem(0, 5); // 初期値0、最大5
// タスク側 (資源が空くまでブロック待機)
sem.acquire();
// シグナル送信側 (割り込みや他タスクから返却・通知)
sem.release();
計数セマフォ (Counting Semaphore) / バイナリセマフォ
定義 sync.hpp:24

構築子と解体子

◆ Semaphore()

tk::Semaphore::Semaphore ( int32_t initial_count = 1,
int32_t max_count = 1 )
inlineexplicit

セマフォを初期化します

引数
initial_count初期資源カウント (省略時: 1)
max_count最大資源カウント (省略時: 1)

関数詳解

◆ acquire()

void tk::Semaphore::acquire ( )
inline

資源を獲得するまで現在のタスクをブロックします

資源カウントが 0 以下の場合はタスクが休止状態になり、CPU は他タスクへ譲渡されます (CPU消費ゼロ)。

◆ count()

int32_t tk::Semaphore::count ( ) const
inline

現在の資源カウントを取得

◆ release()

void tk::Semaphore::release ( )
inline

資源を返却し、待機中タスクがあれば最優先度のタスクを 1 つ起床させます

◆ try_acquire()

bool tk::Semaphore::try_acquire ( )
inline

資源の獲得を試みます (ノンブロッキング)

戻り値
true 獲得成功 (カウントが 1 減算された)
false 資源がないため獲得失敗 (ブロックせず即座に復帰)

このクラス詳解は次のファイルから抽出されました:
  • C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/sync.hpp