信号量可以叫做高级的互斥锁。它能一次性给出多把锁。
#include <semaphore.h>
sem_t sem;
- 初始化信号量
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
形参 | 描述 |
---|---|
sem | 指向要初始化的信号量指针 |
pshared | 指示是否要使用这个信号量在进程的线程之间或进程之间共享。为0则是线程同步,为1是进程同步 |
value | value指定信号量的初始值。最多几个线程可同时共享数据 |
- 销毁信号量
#include <semaphore.h>
int sem_destroy(sem_t *sem);
- 加锁
#include <semaphore.h>
int sem_wait(sem_t *sem);
调用一次相当于对sem做了--操作(value--) 如果sem(sem中的value)值为0,线程会阻塞
- 尝试加锁
#include <semaphore.h>
int sem_trywait(sem_t *sem);
如果sem值为0,加锁失败,不阻塞,直接返回。
- 限时尝试加锁
#include <semaphore.h>
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
- 解锁
#include <semaphore.h>
int sem_post(sem_t *sem);
对sem做++操作。