歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下多任務間通信和同步-互斥鎖

Linux下多任務間通信和同步-互斥鎖

日期:2017/3/1 9:50:21   编辑: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);

 

Copyright © Linux教程網 All Rights Reserved