linux 线程同步
来源:互联网 发布:淘宝衣服评价语20字 编辑:程序博客网 时间:2024/06/15 18:25
多线程之间的同步方式有以下几种选择:
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 );
- linux 线程 线程同步
- linux 线程同步
- Linux中的线程同步
- Linux线程同步
- Linux 下线程同步
- Linux线程同步
- Linux线程同步
- Linux线程同步
- linux线程同步机制
- Linux 线程同步
- linux线程同步
- Linux线程及同步
- linux下线程同步
- linux 线程同步
- linux线程同步问题
- Linux多线程,线程同步
- linux线程同步浅析
- linux线程同步
- USACO5.3 IDDFS_强连通_二维树状数组_斐蜀定理_矩形切割
- 文件上传form属性:enctype=multipart/form-data
- 每天laravel-20160818| Container -21
- 如何安装CRX格式?Chrome插件离线安装,CRX格式安装方法
- HDOJ 2044 一只小蜜蜂... 递推系列
- linux 线程同步
- 怎样用cmd启动停止服务
- webService的用法简介
- 矩阵有关知识的深刻理解!
- JS性能优化详细
- Android通用流行框架大全
- ImageView中ScaleType
- 关于返回局部变量的内存
- java学习、java教程:5种Java数据计算层的解决方法