實現程序之間上鎖有多種方式,可以用檔案鎖,但檔案鎖要涉及到檔案系統,十分耗時。其實程序之間也可以用執行緒鎖,因為執行緒鎖不僅可以用於執行緒之間同樣可以用於程序之間。
為了在多個程序之間使用執行緒鎖,必須做到(1)互斥鎖變數必須儲存在為所有程序所共享的記憶體中;(2)必須通知執行緒函式庫互斥鎖是在不同程序之間共享的。
針對第一條,必須將互斥鎖放到共享記憶體中,不同程序共享記憶體有多種方式,在此我們使用mmap函式和/dev/zero裝置。例如以下函式:
static pthread_mutex_t *mptr;
void my_lock_init(char * pathname)
首先開啟/dev/zero,並呼叫mmap,對映的位元組數為pthread_mutex_t型別大小。緊接著關閉檔案,這裡不會有問題,因為描述字已經記憶體影**。
在共享記憶體裡建立的互斥鎖必須用pthread_mutexattr_init函式來動態初始化,然後賦予pthread_process_shared屬性,本屬性的預設值是pthread_process_private,只允許單個程序內使用。。最後使用pthread_mutex_init初始化互斥鎖變數。支援程序間使用執行緒鎖的初始工作全部完成,可以使用了,如下:
pthread_mutex_lock(mptr);
pthread_mutex_unlock(mptr);
執行緒之間和程序之間的同步
今天學習的內容為 利用互斥事件來控制線程之間 程序之間的同步問題。其實,程序之間的同步也就類似於執行緒之間的同步。互斥事件的作用就是為了保證任乙個時間內,只有乙個執行緒對對公共資源進行操作。下面來看一下執行緒之間的同步,如果是在乙個程序內的執行緒同步問題的話。這樣的例子很多,我就舉乙個最簡單的,執行...
程序之間 執行緒之間的通訊方式
1 程序間的8中通訊方式 1 無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 2 高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方...
程序 執行緒之間通訊方式
管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 namedpipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semophore 訊號量是乙個計數器,可以用來 控制多個程序對...