您当前的位置: 首页 >  linux

phymat.nico

暂无认证

  • 2浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Linux多线程同步的几种方式

phymat.nico 发布时间:2018-01-21 00:12:07 ,浏览量:2

线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。

1)互斥锁(mutex)

    通过锁机制实现线程间的同步。同一时刻只允许一个线程执行一个关键部分的代码。

Cpp代码   收藏代码
  1. int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t *mutexattr);  
  2. int pthread_mutex_lock(pthread_mutex *mutex);  
  3. int pthread_mutex_destroy(pthread_mutex *mutex);  
  4. int pthread_mutex_unlock(pthread_mutex *  

 

(1)先初始化锁init()或静态赋值pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIER

attr_t有:

PTHREAD_MUTEX_TIMED_NP:其余线程等待队列

PTHREAD_MUTEX_RECURSIVE_NP:嵌套锁,允许线程多次加锁,不同线程,解锁后重新竞争

PTHREAD_MUTEX_ERRORCHECK_NP:检错,与一同,线程请求已用锁,返回EDEADLK;

PTHREAD_MUTEX_ADAPTIVE_NP:适应锁,解锁后重新竞争

(2)加锁,lock,trylock,lock阻塞等待锁,trylock立即返回EBUSY

(3)解锁,unlock需满足是加锁状态,且由加锁线程解锁

(4)清除锁,destroy(此时锁必需unlock,否则返回EBUSY,//Linux下互斥锁不占用内存资源

示例代码

Cpp代码   收藏代码
  1. #include    
  2. #include    
  3. #include    
  4. #include    
  5. #include "iostream"   
  6.    
  7. using namespace std;   
  8.    
  9. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;   
  10.    
  11. int tmp;   
  12.    
  13. void* thread(void *arg)   
  14. {   
  15.     cout 
关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0496s