linux 线程 pthread

pthread.h不是linux默认头文件   编译时应追加参数-lpthread

如 g++    11-1.cpp -lpthread

 

 

pthread_create函数

int pthread_create(pthread_t*   tidp, const pthread_att_t  *  attr ,void* (*func)(void*),void*arg)

创建线程,成功返回0,否则返回错误编号

 

创建成功则将新线程ID存入tidp,

attr 为新线程的属性,为空则属性默认

func为新线程执行的函数

arg为func函数参数

 

 

pthread_t   pthread_self(void)

返回线程自身的线程ID

 

 

pthread_cleanup_push与pthread_cleanup_pop函数

void  pthread_cleanup_push  ( void  (*rtn)(void*),   void* arg )

void pthread_cleanup_pop(  int   execute )

两个函数是以宏定义的方式实现的,在push中存在{,在pop中存在与之匹配的},所以两个函数必须成对出现.

两个函数作用为:保证控制流在这个两个函数代码段之间某个点退出时保证push注册的函数以与注册顺序相反的顺序被调用.

当代码执行到pop函数时,取消注册的函数,同时根据pop函数的参数execute确定是否在取消注册函数的同时执行函数(非0值则执行)

 

pthread_exit函数

 

void pthread_exit(  void  *rval_ptr   )

推出线程,其它线程通过pthread_join函数访问此函数设置的rval_ptr内容

 

pthread_join函数

 

int  pthread_join(  pthread_tthread,   void **rval_ptr )

等待线程thread退出,返回码存于ravl_ptr

 

 

 

三种线程同步的机制

1.互斥量mutex

int pthread_mutex_init( pthread_mutex_t *    mutex,  const  pthread_mutexattr_t*    attr )

初始化互斥变量  mutex,如果mutex为静态变量可以用PTHREAD_MUTEX_INITIALIZER初始化

成功则返回0,否则返回错误编号

 

int  pthread_mutex_destroy( pthread_mutex_t* mutex   )

销毁动态申请的互斥变量

成功则返回0,否则返回错误编号

 

int  pthread_mutex_lock(pthread_mutex_t* mutex)

以阻塞方式为互斥量mutex加锁,加锁不成功时将阻塞

int  pthread_mutex_trylock(pthread_mutex_t* mutex)

以非阻塞方式为互斥量mutex加锁,加锁不成功将返回EBUSY

int  pthread_mutex_unlock(pthread_mutex_t* mutex)

为互斥量mutex解锁

 

成功均返回0,不成功则返回错误编号

 

 

 

2.读写锁

共享读锁,独占写锁

试图加一个写锁时将阻塞后面的读锁请求

 

int  pthread_rwlock_init(pthread_rwlock_t *    rwlock,   const pthread_rwlockattr_t*    attr  )

 

int  pthread_rwlock_destroy( pthread_rwlock_t*  rwlock  )

 

int  pthread_rwlock_rdlock(pthread_rwlock_t* rwlock)

加读锁,加锁不成功时将阻塞

int  pthread_rwlock_wrlock(pthread_rwlock_t* rwlock)

加写锁

int  pthread_rwlock_unlock(pthread_rwlock_t* rwlock)

解锁

 

成功均返回0,不成功则返回错误编号

 

3.条件变量

条件变量与互斥量一起使用,使线程以无竞争的方式等待特定条件发生

 

int pthread_cond_init( pthread_cond_t *   cond,   const  pthread_condattr_t*    attr )

int   pthread_cond_destroy(pthread_cond_t*  cond )

int  pthread_cond_wait(pthread_cond_t*  cond ,pthread_mutex_t*  mutex)

 

int  pthread_cond_timewait

(pthread_cond_t*   cond ,pthread_mutex_t*  mutex, const struct  timespec*  timeout )

 

 

使用以下函数唤醒等待某个条件的线程

 

int pthread_cond_signal(pthread_cond_t*  cond)//唤醒等待条件的某个线程

int pthread_cond_broadcast(pthread_cond_t  *cond )//唤醒所有等待该条件的线程

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值