目次 - SDL 3.0 API(機能別) - 同期プリミティブ - SDL_CreateSemaphore

SDL_CreateSemaphore

新しいセマフォを生成する

ヘッダ

SDL3/SDL_mutex.h

構文

SDL_Semaphore * SDL_CreateSemaphore(Uint32 initial_value);

引数

Uint32initial_valueセマフォの初期値

戻り値

(SDL_Semaphore *) 新しいセマフォを戻す. 失敗のときNULLを戻す. SDL_GetError()で詳細を知ることができる.

詳細

この関数は新しいセマフォを生成し, initial_valueの値で初期化する. セマフォの待機操作でアトミック(不可分)にセマフォの値を1減算する. もしセマフォの値が0ならば待機する. 通知操作でアトミックにセマフォの値を1加算し, 待機中のスレッドを再開し, それらが再び待機操作をすることを許可する.

バージョン

SDL 3.2.0以降

サンプルコード

セマフォの典型的な使用法:

void add_data_to_queue(void);
void get_data_from_queue(void);
int data_available(void);
void wait_for_threads(void);

SDL_AtomicInt done;
SDL_Semaphore *sem;

SDL_SetAtomicInt(&done, 0);
sem = SDL_CreateSemaphore(0);


Thread_A:
    while (!SDL_GetAtomicInt(&done)) {
        add_data_to_queue();
        SDL_SignalSemaphore(sem);
    }

Thread_B:
    while (!SDL_GetAtomicInt(&done)) {
        SDL_WaitSemaphore(sem);
        if (data_available()) {
            get_data_from_queue();
        }
    }


SDL_SetAtomicInt(&done, 1);
SDL_SignalSemaphore(sem);
wait_for_threads();
SDL_DestroySemaphore(sem);

関連項目

SDL Wikiへのリンク

SDL_CreateSemaphore - SDL Wiki