linux 程序同步 mutex和檔案鎖

2021-07-25 12:34:13 字數 1970 閱讀 8477

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中引入程序後,雖然提高了資源的利用率和系統吞吐量,但是由於程序的非同步性將會給系統造成混亂,尤其是他們在爭搶臨界資源時。當多個程序去爭用共享變數 鍊錶時,可能導致資料處理出錯。程序同步的任務就是對多個相關程序在執行次序上進行協調,使得併發執行的程序之間能有效地共享資源和相互合作,從而使程式的執...

程序同步問題

有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀者可以同時對檔案執行讀操作 只允許乙個寫者往檔案中寫資訊 任一寫者在完成寫操作之前不允許其他讀者或寫者工...