Manpages

名 前

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

valueSEM_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/ に 書 か れ て い る 。