linux信号量,一个进程可以阻塞自己吗?

时间:2010-12-16 07:59:45

标签: c linux unix ipc semaphore

我使用semget()来获取信号量,并将其初始化为0,然后我想用semop()等它,但它会直接返回。 (另一个过程旨在获取SEM并在某些操作后释放它)

但是如果我得到一个SEM并在一个过程中将其初始化为0,并在另一个过程中等待它,那么它就可以了。

这是否意味着一个过程无法阻止自己?

感谢!!!

像这样:

int semid = semget(IPC_PRIVATE, 1, IPC_CREAT);
union semun su;
su.val = 0;
semctl(semid, 1, SETVAL, su);
struct sembuf sb;
sb.sem_num = 0;
sb.sem_op  = -1;
sb.sem_flg = 0;
semop(semid, &sb, 1);

1 个答案:

答案 0 :(得分:1)

目前我应该看到你应该:

  1. 将信号量初始化为1(su.val)

  2. 调用semop并将sb.sem_op设置为0(即等待计数器降至零)。

  3. 在其他进程中删除计数(sem_op = -1)。

  4. 因为你用0初始化信号量并调用它减1(信号量永远不会低于零),你的等待调用将成功,你的进程不会阻塞。 这有帮助吗?

    也许这可能会提供额外的见解:

    http://linuxdevcenter.com/pub/a/linux/2007/05/24/semaphores-in-linux.html?page=2