Linux下多任务间通信和同步-互斥锁
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 <pthread.h>
int pthread_mutex_init(pthread_mutex_t*mutex, const pthread_mutexattr_t *mutexattr);
参数mutex:是pthread_mutex_t数据类型的指针;
参数mutexattr:是互斥锁的属性,通常只需设置为NULL,即以默认的属性初始化互斥锁.
系统调用pthread_mutex_lock()
该系统调用对互斥锁枷锁,其原型为:
#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t*mutex);
对于一个已上锁的互斥锁,若调用pthread_mutex_lock()函数再次加锁,将使调用线程阻塞,直到互斥锁被解锁.调用成功发那会0,失败返回-1.参数mutex是pthread_mutex_t数据类型的指针。
系统调用pthread_mutex_trylock()
该系统调用对互斥锁mutex加锁.其原型为:
#include <pthread.h>
Int pthread_mutex_trylock(pthread_mutex_t*mutex);
对于一个已上锁的互斥锁,若调用pthread_mutex_trylock()函数再次加锁,将返回错误EBUSY(已加锁错误),因而不会发生阻塞.对于未上锁的情况,该函数将对互斥锁加锁.调用成功返回0,失败返回-1.
系统调用pthread_mutex_unlock()
该系统调用解除mutex所指的互斥锁,其原型为:
#include <pthread.h>
int pthread_mutex_unlock(pthread_mutex_t*mutex);
更多详情见请继续阅读下一页的精彩内容:
Linux下多任务间通信和同步-mmap共享内存
Linux下多任务间通信和同步-System V共享内存
Linux下多任务间通信和同步-概述
Linux进程间通信
简单解析Linux下进程通信方法
|
评论暂时关闭