找回密码
 立即注册
首页 资源区 代码 线程相关函数-信号量

线程相关函数-信号量

边书仪 7 天前
POSIX信号量

信号量分为匿名信号量和具名信号量两种
匿名信号量

sem_init函数

该函数可以对POSIX匿名信号量进行初始化。
  1. int sem_init(sem_t *sem,int pshared,unsigned int value)
  2. //sem:由sem指向的匿名信号量的地址
  3. //pshared:该值为0,信号在进程的线程中共享;非0表示信号在进程之间共享,应该位于共享内存中
  4. //value:匿名信号量的值由参数value进行初始化
  5. //ret:成功返回0;失败返回-1,并返回错误码
复制代码
sem_wait函数

该函数相当于p操作,表示要申请信号量,此函数有阻塞特性
  1. int sem_wait(sem_t *sem)
  2. //sem:由它指向的信号量
  3. //ret:成功返回0,失败返回错误码
复制代码
sem_trywait函数

该函数相当于p操作,表示要申请信号量,此函数没有阻塞特性
  1. int sem_trywait(sem_t *sem)
  2. //sem:由它指向的信号量
  3. //ret:成功返回0,失败返回错误码
复制代码
sem_timedwait函数

该函数相当于p操作,表示要申请信号量,此函数会等待一段时间
  1. struct timespec {
  2.     time_t tv_sec;  // 秒
  3.     long tv_nsec;   // 纳秒(范围为0到999,999,999)
  4. };
  5. int sem_timedwait(sem_t *sem,const struct timespec *abs_timeout)
  6. //sem:由它指向的信号量
  7. //abs_timeout:指向一个struct timespec类型的指针,表示绝对超时时间
  8. //ret:成功返回0,失败返回错误码
复制代码
sem_post函数

此函数可以解锁一个信号量,相当于v操作
  1. int sem_post(sem_t *sem)
  2. //sem:由它指向的信号量
  3. //ret:成功返回0,失败返回错误码
复制代码
具名信号量

sem_open函数

此函数可以创建或者打开POSIX具名信号量
  1. sem_t *sem_open(const char *name, int oflag);
  2. sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
  3. //name:指定信号量的名称
  4. //oflag:操作标志:O_CREAT、O_EXCL
  5. //mode:创建的信号量的权限
  6. //value:创建的信号量的初值
  7. //ret:成功返回信号量的地址,失败返回SEM_FAILED
复制代码
sem_wait函数

该函数相当于p操作,表示要申请信号量,此函数有阻塞特性
  1. int sem_wait(sem_t *sem)
  2. //sem:由它指向的信号量
  3. //ret:成功返回0,失败返回错误码
复制代码
sem_trywait函数

该函数相当于p操作,表示要申请信号量,此函数没有阻塞特性
  1. int sem_trywait(sem_t *sem)
  2. //sem:由它指向的信号量
  3. //ret:成功返回0,失败返回错误码
复制代码
sem_timedwait函数

该函数相当于p操作,表示要申请信号量,此函数会等待一段时间
  1. struct timespec {
  2.     time_t tv_sec;  // 秒
  3.     long tv_nsec;   // 纳秒(范围为0到999,999,999)
  4. };
  5. int sem_timedwait(sem_t *sem,const struct timespec *abs_timeout)
  6. //sem:由它指向的信号量
  7. //abs_timeout:指向一个struct timespec类型的指针,表示绝对超时时间
  8. //ret:成功返回0,失败返回错误码
复制代码
sem_post函数

此函数可以解锁一个信号量,相当于v操作
  1. int sem_post(sem_t *sem)
  2. //sem:由它指向的信号量
  3. //ret:成功返回0,失败返回错误码
复制代码
sem_close函数

此函数可以关闭一个信号量
  1. int sem_close(sem_t *sem)
  2. //sem:由它指向的信号量
  3. //ret:成功返回0,失败返回错误码
复制代码
sem_unlink函数

此函数可以实现删除POSIX具名信号量
  1. int sem_unlink(const char *name)
  2. //name:由它指定的信号量
  3. //ret:成功返回0,失败返回错误码
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册