1、sem_init
sem_init 函数用于初始化一个未命名的信号量,其函数原型如下:
int sem_init(sem_t *sem, int pshared, unsigned int value);
sem:指向要初始化的信号量的指针。
pshared:指定信号量的共享类型。如果 pshared 的值为 0,表示信号量将被进程内的线程共享;如果 pshared 的值为非零,表示信号量将在进程之间共享。
value:指定信号量的初始值。
作用:
sem_init 函数用于初始化信号量,pshared 参数用于指定信号量的共享类型,value 参数用于指定信号量的初始值。
2、sem_getvalue
sem_getvalue 函数用于获取指定信号量的当前值,其函数原型如下:
int sem_getvalue(sem_t *sem, int *sval);
sem:指向要获取当前值的信号量的指针。
sval:指向一个整数的指针,用于存储获取到的信号量的当前值。
作用:
sem_getvalue 函数的作用是获取指定信号量的当前值,并将其存储在 sval 指向的整数中。
sem_getvalue 可以用来查询信号量的当前计数值,以便了解当前是否有可用资源或者等待者的数量。在多线程编程中,这个函数可以用来监控信号量的状态,以便进行合适的调度和资源管理。
3、sem_wait
sem_wait 函数用于等待信号量,并在获取到信号量时进行减一操作。其函数原型如下:
int sem_wait(sem_t *sem);
sem:指向要等待的信号量的指针。
作用:
sem_wait 函数的作用是等待指定的信号量。当信号量的值大于 0 时,sem_wait 函数将信号量的值减一,并立即返回。如果信号量的值为 0,则调用线程将被阻塞,直到信号量的值大于 0 为止。
4、sem_post
sem_post 函数用于释放信号量,并在释放后进行加一操作。其函数原型如下:
int sem_post(sem_t *sem);
sem:指向要释放的信号量的指针。
作用:
sem_post 函数的作用是释放指定的信号量,并将信号量的值加一。当有线程因等待该信号量而被阻塞时,调用 sem_post 将会唤醒其中一个线程。
5、sem_timedwait
sem_timedwait 函数的原型
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
sem: 指向要等待的信号量的指针。
abs_timeout: 指向 timespec 结构的指针,表示等待的超时时间。
作用
sem_timedwait 函数会阻塞当前线程,直到信号量 sem 的值大于 0 或者超过指定的超时时间。如果成功获取了信号量,函数返回 0;如果超时,返回 -1,并设置 error 为 ETIMEDOUT。