ここでは、VC++ でセマフォの基本的な使い方のサンプルコードを掲載しています。セマフォは排他制御に利用することが一般的です(むしろそれ以外の使い方は知りません)。
スポンサーリンク
セマフォを使ったサンプルコード
セマフォを使ったサンプルコードになります。詳細はサンプル内のコメントを参照ください。多くの場合は、それぞれの処理をメソッドに割り当てたクラスを作成して利用することになると思います。
// 初期値1、最大値1
// セマフォを取得できるのは1つのスレッドのみ
HANDLE semhd = CreateSemaphore( NULL, 1, 1, "SemName");
if(semhd == NULL) {
DWORD errcd = GetLastError();
exit(-1);
}
// 最大1000ミリ秒セマフォが獲得できるまで待機
DWORD ret = WaitForSingleObject(semhd, 1000);
// セマフォの獲得に成功すると、WAIT_OBJECT_0 が返る
if(ret != WAIT_OBJECT_0) {
// セマフォの獲得に失敗したらプロセス終了
// タイムアウト:WAIT_TIMEOUT
// 関数失敗:WAIT_FAILED
exit(-1);
}
// セマフォの解放
// リソースの解放数は1とする
ReleaseSemaphore(semhd, 1, NULL);
// セマフォを削除する
CloseHandle(semhd);
参考
最近、秋らしくなってきました。富山では稲刈り真っただ中です。わたしは毎日同じ場所で休憩しているのですが、いつも同じ場所に同じ(?)カエルがいます。
コンクリートの上にいるためか、コンクリート色になっています。擬態(変色?)というやつでしょうか。生物も中々面白いです。毎日見ているせいか愛着もわいてきます。
カエル on コンクリート

// セマフォの獲得に失敗したらプロセス終了
の時に CloseHandle(semhd); は不要?