linux服务器开发(线程创建及信号量部分)pthread_xxx();sem_xxx();

pthread_xxx()函数解析

线程的创建

int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*start_routine)(void*),void *arg);

第一个参数:线程标识符

第二个参数,线程属性设置,NULL表示缺省类型;

第3个参数:线程执行函数,参数和返回值都为 void*

第4个参数,传递给start_routine的参数

返回值:成功返回0,返回非0 失败;

功能:创建一个线程,线程执行第3个参数中的函数,并且将第4个参数作为该函数的参数,将该线程的线程标识符保存到第一个参数对应thread中

线程的退出

void pthread_exit(void *retval);

参数线程结束的返回值,可以通过pthread_join函数来接收;

返回值:任意类型

功能:退出线程,并返回结果;

线程接收资源的手动回收

int pthread_join(pthread_t pthread,void **thread_result);

第一个参数:线程标识符

第二个参数:用户定义的指针,用来接收被线程退出时返回的值;(当不为NULL时)

返回值:成功返回0,失败返回非0

作用:手动回收线程的资源,接收线程退出时候的返回值;

设置线程分离属性

int pthread_detach(pthread_t pthread);

参数:线程标识符

返回值:成功返回0 ,失败返回非0

功能:将主线程和子线程分离,子线程结束,线程资源自动回收,而不用手动回收子线程的资源;

定义变量存用来放线程标识符

pthread_t 存放线程标识的变量;

功能:用来存放pthread_create()过去的线程标识符;

sem_xxx()函数解析

信号量的初始化

int sem_init(sem_t *sem,int pshared,unsigned int value);

参数1:信号量

参数2:决定信号量是否能在进程间通信。目前linux没有实现进程间共享信号量,所以这个值只能取0,表示信号量只能用于进程内部的线程通信

参数3:信号量初始值

返回值:成功返回0,失败返回-1

功能:初始化信号量 sem,设置通信方式为线程间通信,为sem赋初值为value,

信号量P操作

int sem_wait(sem_t *sem);

参数:信号量

返回值:成功返回0,失败:返回-1

功能:阻塞等待,直到信号量的值不为0,然后将信号量的值减去1,继续向下执行;

信号量V操作

int sem_post(sem_t *sem);

参数:信号量

返回值:成功返回0,失败返回-1

功能:将信号量的值加1,继续向下执行

销毁信号量

int sem_destroy(sem_t *sem);

参数:信号量

返回值:成功返回0,失败返回-1

功能:删除信号量

创建信号量

semt_t 信号量;

功能:定义信号量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值