| | |
| | | while (semop(semid, &sops, 1) == -1) |
| | | if (errno != EINTR) { |
| | | // err_msg(errno, "svsem_dec"); |
| | | return errno; |
| | | return -1; |
| | | } |
| | | |
| | | return 0; |
| | |
| | | sops.sem_num = 0; |
| | | sops.sem_op = -1; |
| | | sops.sem_flg = IPC_NOWAIT | 0; |
| | | |
| | | |
| | | if (semop(semid, &sops, 1) == -1) |
| | | if (errno != EINTR) { |
| | | // err_msg(errno, "svsem_dec_nowait"); |
| | | return errno; |
| | | } |
| | | |
| | | return 0; |
| | | return semop(semid, &sops, 1) ; |
| | | } |
| | | |
| | | int svsem_timedwait(const int semid, const struct timespec *timeout) { |
| | |
| | | while (semtimedop(semid, &sops, 1, timeout) == -1) |
| | | if (errno != EINTR) { |
| | | // err_msg(errno, "svsem_psem_timedwait"); |
| | | return errno; |
| | | return -1; |
| | | } |
| | | |
| | | return 0; |
| | |
| | | int rv = semop(semid, &sops, 1); |
| | | if (rv == -1) { |
| | | // err_msg(errno, "svsem_inc"); |
| | | return errno; |
| | | return -1; |
| | | } |
| | | return 0; |
| | | } |
| | |
| | | arg.val = 1; |
| | | if (semctl(semid, 1, SETVAL, arg) == -1) { |
| | | err_msg(errno, "svsem_set"); |
| | | return errno; |
| | | return -1; |
| | | } |
| | | |
| | | //释放mutex |
| | |
| | | while (semop(semid, sops, 2) == -1) |
| | | if (errno != EINTR) { |
| | | // err_msg(errno, "Svsvsem_dec"); |
| | | return errno; |
| | | return -1; |
| | | } |
| | | |
| | | |
| | |
| | | while (semop(semid, sops, 1) == -1) |
| | | if (errno != EINTR) { |
| | | // err_msg(errno, "Svsvsem_dec"); |
| | | return errno; |
| | | return -1; |
| | | } |
| | | |
| | | return 0; |
| | |
| | | |
| | | if (semctl(semid, 1, SETVAL, arg) == -1) { |
| | | err_msg(errno, "svsem_set"); |
| | | return errno; |
| | | return -1; |
| | | } |
| | | return 0; |
| | | } |
| | |
| | | while (semop(semid, &sops, 1) == -1) |
| | | if (errno != EINTR) { |
| | | // err_msg(errno, "svsem_zero"); |
| | | return errno; |
| | | return -1; |
| | | } |
| | | |
| | | return 0; |
| | |
| | | while (semop(semid, &sops, 1) == -1) |
| | | if (errno != EINTR) { |
| | | // err_msg(errno, "svsem_zero_nowait"); |
| | | return errno; |
| | | return -1; |
| | | } |
| | | |
| | | return 0; |
| | |
| | | while (semtimedop(semid, &sops, 1, timeout) == -1) |
| | | if (errno != EINTR) { |
| | | // err_msg(errno, "svsem_zero_timeout"); |
| | | return errno; |
| | | return -1; |
| | | } |
| | | |
| | | return 0; |
| | |
| | | int svsem_set(int semid, int val) { |
| | | union semun arg; |
| | | arg.val = val; |
| | | if (semctl(semid, 0, SETVAL, arg) == -1) { |
| | | err_msg(errno, "svsem_set"); |
| | | return errno; |
| | | } |
| | | return 0; |
| | | |
| | | return semctl(semid, 0, SETVAL, arg); |
| | | } |
| | | |
| | | |