2011-02-25 41 views

回答

1

是的,sem_t可以取值大于1.您可以使用sem_init将信号量初始化为abitrary值。从this link引述:

要初始化信号量,使用 sem_init():

int sem_init(sem_t *sem, int pshared, unsigned int value); 
  • sem指向一个信号量对象 初始化
  • pshared的是一个标志 表示是否不是 信号量应与 fork()ed进程共享。 LinuxThreads的不 当前不支持共享 信号灯
  • 值是初始值 信号量设定为
  • 实施例的

使用:

sem_init(&sem_name, 0, 10); 

我不知道的任何函数,可以通过任意值增加sem_t。

+1

另请参阅此问题,可能的重复:http://stackoverflow.com/questions/3491762/incrementing-the-value-of-posix-semaphores-by-more-than-1 – razlebe 2011-02-25 11:29:29

+2

pshared不会使信号量共享与分叉的孩子。只有当信号量在已经共享的内存中创建时才有用,在这种情况下,pshared信号量可以与可映射共享内存的任何其他进程共享,而不仅仅是儿童。 – 2011-06-13 19:40:38