程序間也可以使用互斥鎖,來達到同步的目的。但應在pthread_mutex_init初始化之前,修改其屬性為程序間共享。mutex的屬性修改函式主要有以下幾個。
pthread_mutexattr_t
mattr 型別 //用於定義mutex鎖的【屬性】
int pthread_mutexattr_init(pthread_mutexattr_t*attr); //初始化乙個mutex屬性物件
int pthread_mutexattr_destroy(pthread_mutexattr_t*attr); //銷毀mutex屬性物件 (而非銷毀鎖)
intpthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared); //修改mutex屬性
參2:pshared取值
- 執行緒鎖:pthread_process_private(mutex的預設屬性即為執行緒鎖,程序間私有)
- 程序鎖:pthread_process_shared
父子程序通過mmap產生的記憶體對映去進行通訊
子程序對num一次+1
父程序對num一次+2
父子程序使用mutex進行互斥的訪問mmap中的共享的變數num
#include
#include
#include
#include
struct mt
;int
main
(void)}
else
if(pid >0)
wait
(null);
}pthread_mutexattr_destroy
(&mm->mutexattr)
;//銷毀mutex屬性物件
pthread_mutex_destroy
(&mm->mutex)
;//銷毀mutex
munmap
(mm,
sizeof
(*mm));
//釋放對映區
return0;
}
執行緒 程序同步 互斥量
互斥量 mutex 是一種核心物件,它能夠確保執行緒擁有對單個資源的互斥訪問權。互斥量包含乙個使用數量,乙個執行緒 id 和乙個遞迴計數器。id用於標識系統中的哪個執行緒當前擁有互斥物件,遞迴計數器用於指明該執行緒擁有互斥物件的次數。互斥量的行為特性與臨界段相同,但是互斥量屬於核心物件,而臨界段屬於...
程序同步與互斥
程序同步與互斥 首先,我們看乙個例子 程序p1 p2公用乙個變數count,初始值為0 p1 p2兩個程序的執行順序是隨機的,p1 p2可能順序執行或交錯執行。由圖可見,不同的執行順序,count值會不同,這是不允許的。在多道程式系統中,由於資源共享或程序合作,使程序間形成間接相互制約和直接相互制約...
程序同步與互斥
為什麼要引入程序同步的概念?多道程式環境下的程序併發執行,它們相互之間存在著不同的制約關係,為了理解和協調這種制約的關係,引入了程序同步的概念。臨界資源是一次只能為乙個程序使用的資源。由於臨界資源的特性,就決定了 對它的訪問必須是互斥的。在每個程序中,訪問臨界資源的那段 稱為臨界區。為了保證臨界資源...