文档介绍:ce123的技术博客
专注于嵌入式软件开发
Linux下多任务间通信和同步-互斥锁
分类: linux多任务间通信和同步 2013-11-27 08:51 1713人阅读评论(4) 收藏举报
Linux下多任务间通信和同步-互斥锁
嵌入式开发交流群280352802,289195589,欢迎加入!
概述
互斥锁(Mutex)是一种简单的通过加锁的方法来控制对共享资源的
存取,一般用于解决线程间资源访问的唯一性问题.
互斥锁其实很简单,它只有两种状态:
有一个线程掌握某个互斥的锁,拥有上锁状态的线程能够对共享资源进行操
,则该线程就会挂起,直到
似,主要包括以下这些.
pthread_mutex_init:互斥锁初始化;
pthread_mute_lock:互斥锁上锁(阻塞版);
pthread_mutex_trylock:互斥锁上锁(非阻塞版);
pthread_mutex_unlock:互斥锁解锁;
pthread_mutex_destory:消除互斥锁. 线程互斥锁的数据类型是
pthread_mutex_t,在使用前,要对其进行初始化,有下列两种方法:
1. 静态初始化:可以把PTHREAD_MUTEX_INITIALIZER常量赋值给静态分配的
互斥锁变量.
2. 动态初始化:在申请内存(malloc)之后,通过pthread_mute_init进行初始
.
系统调用pthread_mutex_init() 该系统该调用初始化互斥
:
#include <>
int pthread_mutex_init(pthread_mutex_t*mutex, const pthread_mutexattr_t *mutexattr);
参数mutex:是pthread_mutex_t数据类型的指针;
参数mutexattr:是互斥锁的属性,通常只需设置为NULL,即以默认的属性初始
化互斥锁.
系统调用pthread_mutex_lock()
1
该系统调用对互斥锁枷锁,其原型为:
#include <>
int pthread_mutex_lock(pthread_mutex_t*mutex);     对于一个已上锁的互斥锁,若调用pthread_mutex_lock()函数再次加锁,将使调用线程阻塞,,失败返回-。
系统调用pthread_mutex_trylock()
     :
#include <>
Int pthread_mutex_trylock(pthread_mutex_t*mutex); 
对于一个已上锁的互斥锁,若调用pthread_mutex_trylock()函数再
次加锁,将返回错误EB