嵌入式 多线程socket互斥锁和条件变量实现广播包

原创 2013年12月02日 14:57:17
互斥锁和条件变量出自Posix.1 线程标准,它们总是可用来同步一个进程内的各个线程。
如果一个互斥锁或条件变量存放在多个进程间共享的某个内存区中,那么Posix还允许它用于
这些进程间的同步。

互斥锁
mutual exclusion
critical region

Posix互斥锁作为数据类型pthread_mutex_t的变量声明。
如果互斥锁变量是静态分配的,那么我们可以把它初始化成常量PTHREAD_MUTEX_INITIALIZER:
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
如果互斥锁是动态分配的,或者分配在共享内存区中,必须在运行时刻通过调
用pthread_mutex_init函数初始化它。

int pthread_mutex_lock(pthread_mutex_t *mptr);
int pthread_mutex_trylock(pthread_mutex_t *mptr);
int pthread_mutex_unlock(pthread_mutex_t *mptr);
都返回:成功时为0,出错时为正的Exxx值。

编程技巧: 努力把共享数据和他们的同步变量(互斥锁,条件变量活信号灯)收集到一个结构中。

条件变量:
int pthread_cond_wait(pthread_cond_t *cptr, pthread_mutex_t*mpthr);
int pthread_cond_signal(pthread_cond_t cptr);
都返回: 成功时为0,出错时为正的Exxx值

pthread_cond_wait 函数原子地执行以下两个动作:
1. 给互斥锁解锁
2. 把调用线程投入睡眠,直到另外某个线程就本条件变量调用pthread_cond_signal.

pthread_cond_wait 函数在返回前重新给互斥锁上锁。

定时等待与广播:
pthread_cond_signal只唤醒等待在相应条件变量上的一个线程。
pthread_cond_broadcast唤醒阻塞在相应条件变量上的所有线程。

int pthread_cond_broadcast(pthread_cond_t *cptr);
int pthread_cond_timedwait(pthread_cond_t *cptr, pthread_mutex_t*mptr,
const struct timespec *abstime);
都返回: 成功时为0,出错时为正的Exxx值。
struct timespec
{
time_t tv_sec;
long tv_nsec;
};

互斥锁和条件变量的属性:
互斥锁和条件变量的初始化或摧毁:
int pthread_mutex_init(pthread_mutex_t *mptr, constpthread_mutexattr_t *attr);
int pthread_mutex_destroy(pthread_mutex_t *mptr);
int pthread_cond_init(pthread_cont_t *cptr, constpthread_condattr_t *attr);
int pthread_cond_destroy(pthread_cond_t *cptr);
都返回: 成功时为0,出错时为正的Exxx值。

互斥锁属性的数据类型为pthread_mutexattr_t,条件变量属性的数据类型为pthread_condattr_t,
它们由以下函数初始化或摧毁:
int pthread_mutexattr_init(pthread_mutexattr_t *att);
int pthread_mutexattr_init(pthread_mutexattr_t *att);
int pthread_condattr_init(pthread_condattr_t *att);
int pthread_condattr_init(pthread_condattr_t *att);
都返回: 成功时为0,出错时为正的Exxx值。

int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr,int *valptr);
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int*valptr);
int pthread_condattr_getpshared(const pthread_condattr_t *attr, int*valptr);
int pthread_condattr_setpshared(pthread_condattr_t *attr, int*valptr);
都返回: 成功时为0,出错时为正的Exxx值。

指定互斥锁或条件变量在不同进程间共享:
PTHREAD_PROCESS_PRIVATE
PTHREAD_PROCESS_SHARED

相关文章推荐

多线程互斥锁和条件变量demo

  • 2016年06月13日 15:06
  • 18KB
  • 下载

多线程用互斥锁和条件变量实现生产者和消费者-------循环任务队列

互斥锁与条件变量简介 在多线程的环境中,全局变量会被各线程共享,因此在操作全局变量的时候需要采用锁机制,在linux里最常用的锁就是互斥锁,互斥锁使用方法如下 //线程A pthread_mutex_...

Linux多线程消费者和生产者模型实例(互斥锁和条件变量使用)

条件变量与互斥锁使用,生产者和消费者模型

linux多线程学习笔记四---线程同步之互斥锁、读写锁和条件变量

一,使用互斥锁 1,初始化互斥量 pthread_mutex_t mutex =PTHREAD_MUTEX_INITIALIZER;//静态初始化互斥量 int pthread_mutex_i...
  • kkxgx
  • kkxgx
  • 2012年04月17日 19:44
  • 3450

Linux多线程 互斥锁与条件变量使用

2013/6/7 caichengyu 如果你认真看下去,必将学习到不少知识,如有错还希望您提出来~ 一、互斥锁 为什么要使用锁? linux下,锁的种类很多,包括互斥锁,文件锁,读写锁······...

转:学习多线程之互斥锁、条件变量-linux多线程初学者

今天费了好久得劲才把这个程序调好,虽然对于lved

linux网络编程二十七:多线程编程之信号量、互斥锁和条件变量

1. locker.h #ifndef __LOCKER_H__ #define __LOCKER_H__ #include #include #include class sem { p...

Posix多线程编程(1) 互斥锁与条件变量

多线程 互斥锁 以及 条件变量的工作流程

linux 多线程编程 互斥锁与条件变量

条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待 “ 条件变量的条件成立” 而挂起,另一个线程使 “条件成立 ”(给出条件成立信号),为了防止竞争,条件变量的使用总...

多线程编程总结(二)——条件变量和互斥锁

1.什么叫互斥锁? 互斥锁(也成互斥量)可以用于保护关键代码段,以确保其独占式的访问,类似于二元信号量。二者都可以称为挂起等待锁———锁资源得不到满足,就会被挂起,在信号量或互斥锁上等待。 注:当前线...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 多线程socket互斥锁和条件变量实现广播包
举报原因:
原因补充:

(最多只允许输入30个字)