关闭

linux 线程同步

标签: 线程 同步
139人阅读 评论(0) 收藏 举报
分类:

多线程之间的同步方式有以下几种选择:

1.通过互斥锁实现。

int  pthread_mutex_init(pthread_mutex_t *mp, const pthread_mutexattr_t *mattr)

int pthread_mutex_lock(pthread_mutex_t *mutex); #include pthread_mutex_t mutex; int ret; ret = pthread_ mutex_lock(&mp); /* acquire the mutex */

int pthread_mutex_unlock(pthread_mutex_t *mutex); #include pthread_mutex_t mutex; int ret; ret = pthread_mutex_unlock(&mutex); /* release the mutex */


2.通过事件通知方式实现,举例如下:

a. 创建文件描述符

g_fd_pcm_capture_request = eventfd ( 0, EFD_SEMAPHORE );


b.在资源消费线程中等待事件

   eventfd_t eventfd_value;
    
    result = eventfd_read ( g_fd_pcm_capture_request, &eventfd_value );
    if(0 != result)
    {
        printf( "[%s]%d: read pcm eventfd [%d] failed!\n", __func__, __LINE__, audio_index);
        return -1;
    }

  

c.在资源生产线程 / 回调函数中产生事件

eventfd_write ( g_fd_pcm_capture_request, 1 );  



3. 通过线程条件变量  pthread_cond_t  实现

自定义结构体如下 (需要注意的是 pthread_cond_t  和 pthread_mutex_t 总是捆绑使用

typedef struct
{
    void **queue;
    int  size;


    pthread_mutex_t mutex;
    pthread_cond_t  in_cv;
    pthread_cond_t  out_cv;
} obe_queue_t;


a.初始化条件变量

void obe_init_queue( obe_queue_t *queue )
{
    pthread_mutex_init( &queue->mutex, NULL );
    pthread_cond_init( &queue->in_cv, NULL );
    pthread_cond_init( &queue->out_cv, NULL );
    queue->size = 0;
}


b.在资源消费线程中等待:

pthread_cond_wait( &pstMuxer->emMuxQueue.in_cv, &pstMuxer->emMuxQueue.mutex );


c。在资源生产线程/回调函数中改变条件:

pthread_mutex_lock( &queue->mutex );

pthread_cond_signal( &queue->in_cv );

 pthread_mutex_unlock( &queue->mutex );


0
0
查看评论

Linux下线程同步的几种方法

Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。 一、互斥锁(mutex)   锁机制是同一时刻只允许一个线程执行一个关键部分的代码。  1. 初始化锁   int pthread_mutex_init(pthread_mutex_t *mutex,con...
  • u010027547
  • u010027547
  • 2015-09-19 13:52
  • 923

linux内核栈,内核同步,用户空间线程同步

在论坛上浏览到一个帖子,是说内核栈的问题的,一时却感到有点陌生了,下面总结一下 http://topic.csdn.net/u/20121101/10/86479004-2f2c-491c-bc43-03cc0e087588.html?69419 1.内核栈 1.每当创建一个进程(主线程),用...
  • xiaoshengqdlg
  • xiaoshengqdlg
  • 2014-09-16 09:24
  • 669

Linux程序设计学习笔记----多线程编程之线程同步条件变量

基本概念与原理
  • hu1020935219
  • hu1020935219
  • 2014-08-15 13:40
  • 1648

linux线程同步和进程同步的区别

基本概念: 大部分同学都知道线程同步和进程同步的概念, 线程同步:多线程编程中,解决共享资源冲突的问题 进程同步:多进程编程中,解决共享资源冲突的问题 但是部分同学对线程同步和进程同步研究得不够深入,比如互斥锁和条件变量能不能同时用于线程同步和进程同步,本质上有什么区别。 首先我们知道,li...
  • daiyudong2020
  • daiyudong2020
  • 2016-06-18 23:34
  • 1588

linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁

Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量、信号量和读写锁。 下面是思维导图: 一、互斥锁(mutex)   锁机制是同一时刻只允许一个线程执行一个关键部分的代码。1 . 初始化锁int pthread_mutex_init(pthread_mutex_t *mute...
  • vertor11
  • vertor11
  • 2017-02-18 11:48
  • 2342

Linux线程同步机制的几种方法总结与对比

线程同步机制的几种方法总结与对比 需要线程同步的原因: 当有多个线程同时访问一个共享内存里面的变量时,有时会出现一个线程正在修改该变量的值,而其他的线程正在读取数据,可能就会导致错误。   实现线程同步机制的方法: ·互斥量 ·读写锁 ·条件变量...
  • u010853261
  • u010853261
  • 2014-10-28 14:46
  • 1446

Linux3种线程同步机制的封装

Linux3种同步机制的封装
  • qisefengzheng
  • qisefengzheng
  • 2015-06-17 11:41
  • 321

Linux下线程同步机制

Linux下线程同步机制
  • hongkangwl
  • hongkangwl
  • 2014-04-11 19:43
  • 1328

Linux多线程间同步与互斥---条件变量(Conditoin Variable)

Linux多线程间同步与互斥---条件变量(Conditoin Variable)
  • Li_Ning_
  • Li_Ning_
  • 2016-08-22 15:17
  • 671

windows与linux线程同步对比

1.1        Windows线程同步 1.1.1   关键代码区Critical Section 所谓“关键代码区”,相信大家看名字也能理解个大概了。首先:它很关键,第二:它是...
  • peter_teng
  • peter_teng
  • 2016-10-10 16:02
  • 957
    个人资料
    • 访问:41810次
    • 积分:922
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:10篇
    • 译文:0篇
    • 评论:15条
    最新评论