多程序共享記憶體續篇 大鎖

2021-08-02 23:32:33 字數 978 閱讀 5842

讀寫鎖,就是多人可以同時訪問,但是同時只有乙個人可以修改的規則。

由於鎖本身的申請和釋放,對於效能有很大的消耗,那麼一般寫只發生在特殊情況,也就是很少發生。

讀鎖常在就是效能的優化方案,只有在申請寫鎖的時候,才會釋放讀鎖。

和之前有什麼不一樣呢,例如,連續的在不同地方的100次讀,以前是要100次讀鎖的申請和釋放,現在只有初始的一次申請讀鎖,中間完全沒有別的消耗。

**如何實現呢?

過程如下:

當有乙個程序需要寫,那麼就要等所有的程序的讀鎖釋放,所以在申請和釋放讀鎖的地方,申請的動作還在。

首先,需要乙個共享變數,當乙個程序申請寫鎖,所有程序可以知曉。

然後,以前申請和釋放讀鎖的地方,實際不是申請和釋放,而是對於寫程序的共享變數的判斷。

所謂的判斷,如果有程序申請寫程序,那麼所有程序都會根據共享變數,手動釋放一次讀鎖,然後申請一次讀鎖。

由於寫申請在前,那麼在手動釋放讀鎖後,寫鎖獲得許可權,申請讀鎖就要等寫鎖的釋放。

總結:乙個程序內的變數read_flag=0,程序開始時候申請讀鎖,只會申請一次,變數置1。後面再申請和釋放,對多程序的共享變數write_flag判斷

write_flag=0:無程序申請寫鎖

申請讀鎖函式,read_flag==1,進來直接退出;read_flag==0,初次申請;

釋放讀鎖函式,直接return,不用對變數進行判斷。

write_flag=1:有程序申請寫鎖

申請讀鎖函式,手動申請一次讀鎖,然後手動釋放一次讀鎖;

釋放讀鎖函式,手動申請一次讀鎖,然後手動釋放一次讀鎖。

寫鎖很簡單,只需要將共享變數置位,然後去申請寫鎖就ok了。

注意這裡對共享變數的操作,是在沒有獲得寫鎖的時候,修改共享變數,如何保證唯一性?

其實不需要唯一性:

其他程序同時申請寫鎖,那麼修改變數都是乙個目的,把它置1;

修改的同時,有讀鎖操作,可能會當時沒有讀到或讀錯?那麼下次再讀唄,只是多了一次讀的時間;

多程序鎖和共享記憶體

當我們用多程序來讀寫檔案的時候,如果乙個程序是寫檔案,乙個程序是讀檔案,如果兩個檔案同時進行,肯定是不行的,必須是檔案寫結束以後,才可以進行讀操作。或者是多個程序在共享一些資源的時候,同時只能有乙個程序進行訪問,那就要有乙個鎖機制進行控制。需求 乙個程序寫入乙個檔案,乙個程序追加檔案,乙個程序讀檔案...

八 8 1多程序鎖和共享記憶體

多程序lock元件 當我們使用多程序讀寫檔案時,乙個程序寫檔案,乙個程序讀檔案。如果兩個程序同時進行,肯定不行,必須等寫結束後,才可以進行多操作。或者多個程序在共享一些資源時,同時只能有乙個程序進行訪問,需要乙個鎖機制控制。import multiprocessing import time loc...

多程序通訊(IPC) 共享記憶體

1 共享記憶體介紹 共享記憶體可以說是最有用的程序間通訊方式,也是最快的ipc形式。兩個不同程序a b共享記憶體的意思是,同一塊物理記憶體被對映到程序a b各自的程序位址空間。程序a可以即時看到程序b對共享記憶體中資料的更新,反之亦然。由於多個程序共享同一塊記憶體區域,必然需要某種同步機制,互斥鎖和...