pthread_mutex預設程序內,需要setpshared
;flock需要檔案,以位元組為單位(1-n個位元組)
1、程序間
pthread_mutex a
依賴的標頭檔案
#include
b函式宣告
int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);
int pthread_mutexattr_init(pthread_mutexattr_t *attr);
關於pshared
可供選的引數:
執行緒鎖:
pthread_process_private
程序鎖:
pthread_process_shared
預設情況下是執行緒鎖
c案例說明:
#include
#include
#include
#include
#include
#include
#include
#include
#include
struct mt ;
int main(void)
} else if(pid > 0)
wait(null); }
err = pthread_mutex_destroy(&mm->mutex);
if(err != 0) /*
父子均需要釋放*/
munmap(mm,sizeof(*mm));
unlink("mt_test");
return 0; }
執行結果:
總結:a
程序間通訊,可以通過記憶體對映的方式對檔案進行操作。
b在上鎖的情況下,數字相加後最後得到的是
30,加鎖後沒有出現衝突。
2檔案鎖
使用fcntl
提供檔案鎖
struct flock ;
案例說明:
#include
#include
#include
#include
#include
#include
void sys_err(char *str)
int main(int argc,char *argv)
if((fd = open(argv[1],o_rdwr)) < 0)
//f_lock.l_type = f_wrlck
f_lock.l_type = f_wrlck;
f_lock.l_whence = seek_set;
f_lock.l_start = 0;
f_lock.l_len = 0; //0
表示整個檔案加鎖
fcntl(fd,f_setlkw,&f_lock);
printf("get flock\n");
sleep(10);
f_lock.l_type = f_unlck;
fcntl(fd,f_setlkw,&f_lock);
printf("un flock\n");
close(fd);
return 0; }
執行結果:
現象說明:當乙個終端在執行的時候,同時開啟另外乙個終端,同時也執行
時發現開始的
10秒內不允許操作,現象是
test
檔案被鎖住了。也就是說不能同時操作這個檔案。
Linux程序同步
linux程序同步 概述 程序間通訊 ipc 方法主要有以下幾種 管道 fifo 共享記憶體 訊息佇列 訊號量 1.管道中還有命名管道和非命名管道 即匿名管道 之分,非命名管道 即匿名管道 只能用於父子程序通訊,命名管道可用於非父子程序,命名管道就是fifo,管道是先進先出的通訊方式 2.訊息佇列是...
程序同步(一) 程序同步相關概念
在os中引入程序後,雖然提高了資源的利用率和系統吞吐量,但是由於程序的非同步性將會給系統造成混亂,尤其是他們在爭搶臨界資源時。當多個程序去爭用共享變數 鍊錶時,可能導致資料處理出錯。程序同步的任務就是對多個相關程序在執行次序上進行協調,使得併發執行的程序之間能有效地共享資源和相互合作,從而使程式的執...
程序同步問題
有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀者可以同時對檔案執行讀操作 只允許乙個寫者往檔案中寫資訊 任一寫者在完成寫操作之前不允許其他讀者或寫者工...