多程序使用pthread mutex

2021-06-07 18:32:57 字數 1214 閱讀 1530

pthread的mutex通常用在多執行緒的同步當中,至於多程序的同步,一直以為只能使用記錄鎖和訊號量,而這兩種機制都需要核心的支援,屬於「重量級」部件。也曾經在多程序同步中使用pthread mutex,但前提有兩個:mutex能為多個程序所見,使mutex物件駐留在共享記憶體中;mutex本身不額外使用程序本地的記憶體,如堆記憶體。第乙個前提容易滿足,對於第二個,gcc的pthread實現也滿足。但我一直沒有注意到的是,pthread mutex標準本身對多程序提供了「可選」支援,只要實現支援、初始化mutex時pthread_mutexattr_t的pshared成員置為pthread_process_shared即可。

pshared預設為pthread_process_private,即僅支援單程序。如果mutex駐留於共享記憶體,但pshared為pthread_process_private,此時多程序操作該mutex的行為是未定義的。這兩天在寫乙個多程序可訪問的庫時就出現了這種「未定義」的行為,花費了乙個多工作日才找到原因。

多程序使用mutex需要的基本操作如下:

#include

#include

#include

pthread_mutex_t *mtx = null;

int main()

pthread_mutexattr_t attr;

pthread_mutexattr_init(&attr); //~necessary, or weird einval error occurs when operating on the mutex

pthread_mutexattr_setpshared(&attr, pthread_process_shared);

pthread_mutex_init(mtx, &attr);

//~ here the fork

pid_t pid = fork();

if (pid < 0) else if (pid > 0) else

return 0;

linux環境下,可能需要碼農們有更強的主動性。很多基礎構件和第三方程式的描述文件和相關訊息不會「主動」找到你,尤其是那些不那麼常用的特性,更不要說那些沒有詳細文件的了,很多時候需要你去扒拉他們的實現**。但這也是開源魅力所在了,對於乙個欲追求卓越的碼農來說,**就是莫大的恩賜了。read the ****ing manual, or read the ****ing code, beyond the code, nothing left.

多程序使用pthread mutex

pthread的mutex通常用在多執行緒的同步當中,至於多程序的同步,一直以為只能使用記錄鎖和訊號量,而這兩種機制都需要核心的支援,屬於 重量級 部件。也曾經在多程序同步中使用pthread mutex,但前提有兩個 mutex能為多個程序所見,使mutex物件駐留在共享記憶體中 mutex本身不...

linux多程序使用

init程序是所有程序的父或者祖父 程序的組成 使用者 id cpu時間片 記憶體 狀態 時鐘 優先順序 源程式 fd 程序的狀態 man ps process state codes r 執行或可執行 d 不可中斷睡眠 s 可中斷睡眠 t 掛起 暫停 等待 x 死亡 z 殭屍 已經結束但依然佔據程...

PHP多程序使用

在我們生活中很少會用都多程序,一般在於處理資料多以及密集計算的業務中 下面我舉乙個例子給大家 利用多程序批量更新資料 php productmodel new product count productmodel count limit 100 page 1 maxpage ceil count l...