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下进程通信方法

  • 1
  • 2
  • 3
  • 下一页

相关内容