信号量
信号量可以同时访问多份资源。
#include <semaphore.h>
int sem_init(sem_t* sem, int pshared, unsigned int value);
int sem_destroy(sem_t* sem);
int sem_post(sem_t* sem);
int sem_wait(sem_t* sem);
int sem_trywait(sem_t* sem);
int sem_timedwait(sem_t* sem, const struct timespec* abs_timeout);
sem_init:
sem是创建信号量对象地址 , pshared代表是否可以与fork出的子进程共享资源(0代表不可共享 , 1代表可共享),value代表初始状态下的资源数。
sem_destroy:
销毁信号量。
sem_post:
信号量的资源计数递增1。当时用sem_wait函数的话就会被唤醒。
sem_trywait:
不断去尝试唤醒,如果失败,就会发回EAGAIN错误码。
sem_timewait:
sem_timedwait 在参数 abs_timeout设置的时间内等待信号量对象的资源计数大于0,否则超时返回,返回值为 ﹣1,错误码 ETIMEDOUT。当使用 sem_timedwait 时,参数 abs_timeout 不能设置为 NULL,否则程序会在运行时调用 sem_timedwait 产生崩溃。
struct timespec
{
time_t tv_sec; /* 秒 */