设为首页 加入收藏

TOP

Linux下多任务间通信和同步-互斥锁
2014-11-24 02:29:29 来源: 作者: 【 】 浏览:0
Tags:Linux 任务 信和 同步

概述


互斥锁(Mutex)是一种简单的通过加锁的方法来控制对共享资源的存取,一般用于解决线程间资源访问的唯一性问题.
互斥锁其实很简单,它只有两种状态:上锁和解锁.在同一时刻只能有一个线程掌握某个互斥的锁,拥有上锁状态的线程能够对共享资源进行操作.若其他线程希望对一个已经上了锁的互斥锁上锁,则该线程就会挂起,直到上锁的线程释放掉互斥锁为止.操作互斥锁的基本函数与信号量用到的函数相似,主要包括以下这些.


pthread_mutex_init:互斥锁初始化;
pthread_mute_lock:互斥锁上锁(阻塞版);
pthread_mutex_trylock:互斥锁上锁(非阻塞版);
pthread_mutex_unlock:互斥锁解锁;
pthread_mutex_destory:消除互斥锁.


线程互斥锁的数据类型是pthread_mutex_t,在使用前,要对其进行初始化,有下列两种方法:


静态初始化:可以把PTHREAD_MUTEX_INITIALIZER常量赋值给静态分配的互斥锁变量.
动态初始化:在申请内存(malloc)之后,通过pthread_mute_init进行初始化.注意在释放内存前需要调用pthread_mutex_destory.
系统调用pthread_mutex_init()


该系统该调用初始化互斥锁变量mutex.其原型为:


#include
int pthread_mutex_init(pthread_mutex_t*mutex, const pthread_mutexattr_t *mutexattr);


参数mutex:是pthread_mutex_t数据类型的指针;
参数mutexattr:是互斥锁的属性,通常只需设置为NULL,即以默认的属性初始化互斥锁.


系统调用pthread_mutex_lock()
该系统调用对互斥锁枷锁,其原型为:


#include
int pthread_mutex_lock(pthread_mutex_t*mutex);


对于一个已上锁的互斥锁,若调用pthread_mutex_lock()函数再次加锁,将使调用线程阻塞,直到互斥锁被解锁.调用成功发那会0,失败返回-1.参数mutex是pthread_mutex_t数据类型的指针。


系统调用pthread_mutex_trylock()


该系统调用对互斥锁mutex加锁.其原型为:


#include


Int pthread_mutex_trylock(pthread_mutex_t*mutex);


对于一个已上锁的互斥锁,若调用pthread_mutex_trylock()函数再次加锁,将返回错误EBUSY(已加锁错误),因而不会发生阻塞.对于未上锁的情况,该函数将对互斥锁加锁.调用成功返回0,失败返回-1.


系统调用pthread_mutex_unlock()


该系统调用解除mutex所指的互斥锁,其原型为:


#include
int pthread_mutex_unlock(pthread_mutex_t*mutex);


相关阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenCV1.0编译错误解决办法 下一篇Linux下多任务间通信和同步-POSIX..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: