加鎖與解鎖
/* 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.管道與...