Linux高階程序間通訊 紀錄鎖

2021-05-24 21:52:58 字數 1683 閱讀 2523

加鎖與解鎖

/* lockit---demonstration of fcntl locking */

#include#include#include#includeint main(void)

printf("parent:locked record /n");

switch(fork())

printf("child:locked/n");

printf("child:exiting/n");

exit(0);

}sleep(5);

/*now parent releases lock before exiting */

printf("parent:unlocking/n");

my_lock.l_type=f_unlck;

if(fcntl(fd,f_setlk,&my_lock)==-1)

/* now parent exiting */

printf("parent:exiting/n");

exit(0);

}

/*jiang@jiang-linux:~/unixprog/2011322$ gcc lookit.c -o lookit;./lookit

parent:locked record

parent:unlocking

parent:exiting

child:locked

child:exiting

*/父子程序相互等待,進入死鎖狀態

#include#include#include#includeint main(void)

printf("lock succeeded (proc %d )/n",getpid());

switch(fork())

printf("second lock succeeded (proc%d)/n",getpid());

if(fcntl(fd,f_setlkw,&second_lock)==-1) //first lock

default:

/*parent*/

printf("parent sleeping/n");

sleep(5);

if(fcntl(fd,f_setlkw,&second_lock)==-1)//lock child's lock

printf("second lock succeeded (proc %d)/n",getpid());

}}int fatal(char *s)

/*進入死鎖狀態了,似乎系統並不會自動檢測2個死鎖的。

jiang@jiang-linux:~/unixprog/2011322$ gcc deadlock.c -o deadlock.o;./deadlock.o

lock succeeded (proc 3023 )

parent sleeping

second lock succeeded (proc 3023)

second lock succeeded (proc3024)

parent sleeping

jiang@jiang-linux:~/unixprog/2011322$ second lock succeeded (proc 3024)

^c*/

程序間通訊 7 鎖

計算機領域中,鎖機制使用的非常多。它主要是為了避免多個程序訪問同一資源時,可能出現的資料不一致問題。例如,cat命令輸出乙個比較大的檔案內容,cat命令的特性是需要先將所有磁碟檔案資料讀取到記憶體後再輸出,所以cat輸出乙個大檔案可能需要花費一些時間。如果在cat在載入檔案時,在另乙個終端上向這個檔...

Linux程序間通訊

程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...