一.檔案鎖
//獲取鎖,如果已經被占用立即返回,errno被設定為eagain
inttry_lock_fd
(int fd)
//獲取鎖,如果已經被占用則等待
intlock_fd
(int fd)
//釋放檔案鎖即返回,errno被設定為eagain
intunlock_fd
(int fd)
二.共享記憶體+記憶體訊號量(又稱無名訊號量)
下面是乙個簡單的測試程式:
#include
#include
#include
#include
sem_t* psem =
null
;int
main()
if(-1
==sem_init
(psem,1,
0)) pid =
fork()
;if(pid <0)
if(0== pid)
else
}else}if
(pid >0)
else
}printf
("process exit\n");
return0;
}
三.共享記憶體+鎖
共享記憶體+互斥鎖或者讀寫鎖或者原子鎖,都可以實現程序間互斥
以原子鎖為例;
#include
#include
#include
inline
intatom_cmp_set
(unsigned
long
*mem,
unsigned
long newval,
unsigned
long oldval)
intmain()
*atom_val =0;
if((pid =
fork()
)<0)
ret =
atom_cmp_set
(atom_val,1,
0);if
(1== ret)
else
return0;
}
輸出:
in parent process atom_cmp_set secceed atom_val:1
in child process atom_cmp_set failed atom_val:1
程序間 對共享資源的訪問 互斥 機制
分類 linux程式設計 2010 05 04 19 21 4291人閱讀收藏 舉報linux null測試 把源 執行一遍就知道了 cpp view plain copy include include include include include include pthread mutex t...
Linux下的多程序間共享資源的互斥訪問
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!include include include include include include pthread mutex t g mutex 建立共享的mutex void init mutex void 設定attr的屬性 pthread mu...
執行緒的共享資源和私有資源
執行緒共享的環境包括 程序 段 程序的公有資料 利用這些共享的資料,執行緒很容易的實現相互之間的通訊 程序開啟的檔案描述符 訊號的處理器 程序的當前目錄和程序使用者id與程序組id。程序擁有這許多共性的同時,還擁有自己的個性。有了這些個性,執行緒才能實現併發性。這些個性包括 1.執行緒id 每個執行...