名 前
sem_init − 名 前 な し セ マ フ ォ を 初 期 化 す る
書 式
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
−pthread と リ ン ク す る 。
説 明
sem_init() は 、 sem が 指 す ア ド レ ス に あ る 名 前 な し セ マ フ ォ を 初 期 化 す る 。 value 引 き 数 は そ の セ マ フ ォ の 初 期 値 を 指 定 す る 。
pshared 引 き 数 は 、 こ の セ マ フ ォ が プ ロ セ ス 内 の ス レ ッ ド 間 で 共 有 さ れ る の か 、 プ ロ セ ス 間 で 共 有 さ れ る の か 、 を 示 す 。
pshared が 0 の 場 合 、 セ マ フ ォ は プ ロ セ ス 内 の ス レ ッ ド 間 で 共 有 さ れ る 。 セ マ フ ォ は す べ て の ス レ ッ ド か ら 参 照 可 能 な ア ド レ ス に 配 置 す べ き で あ る (例 え ば 、 大 域 変 数 や 、 ヒ ー プ 上 に 動 的 に 割 り 当 て ら れ た 変 数 な ど )。
pshared が 0 以 外 の 場 合 、 セ マ フ ォ は プ ロ セ ス 間 で 共 有 さ れ る 。 セ マ フ ォ は 共 有 メ モ リ ー 領 域 に 配 置 す べ き で あ る (shm_open(3), mmap(2), shmget(2) 参 照 )。 (fork(2) で 生 成 さ れ た 子 プ ロ セ ス は 親 プ ロ セ ス の メ モ リ ー マ ッ ピ ン グ を 継 承 す る た め 、 子 プ ロ セ ス も セ マ フ ォ に ア ク セ ス で き る 。 ) 共 有 メ モ リ ー 領 域 に ア ク セ ス で き る プ ロ セ ス な ら ば 、 ど の プ ロ セ ス で も sem_post(3) や sem_wait(3) な ど を 使 っ て セ マ フ ォ を 操 作 で き る 。 す で に 初 期 化 済 の セ マ フ ォ を 初 期 化 し た 場 合 の 挙 動 は 定 義 さ れ て い な い 。
返 り 値
成 功 す る と 、 sem_init() は 0 を 返 す 。 エ ラ ー の 場 合 、 −1 を 返 し 、 errno に エ ラ ー を 示 す 値 を セ ッ ト す る 。
エ ラ ー
EINVAL |
value が SEM_VALUE_MAX を 超 え て い る 。 | ||
ENOSYS |
pshared が 0 以 外 だ が 、 シ ス テ ム が プ ロ セ ス 共 有 セ マ フ ォ を サ ポ ー ト し て い な い (sem_overview(7) 参 照 )。 |
属 性
マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 )
sem_init() 関 数 は ス レ ッ ド セ ー フ で あ る 。
準 拠
POSIX.1−2001.
注 意
妙 な こ と に 、 POSIX.1−2001 は sem_init() が 成 功 し た 場 合 に 返 す べ き 値 を 規 定 し て い な い 。 POSIX.1−2008 で は こ れ が 修 正 さ れ 、 成 功 時 に は 0 を 返 す こ と が 規 定 さ れ た 。
関 連 項 目
sem_destroy(3), sem_post(3), sem_wait(3), sem_overview(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。