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;
}
多程序使用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...