linux 下程序間的同步機制有哪些?

時間 2021-12-25 11:04:01

1樓:雨落驚風

1. 程序間同步:

管道,函式pipe,mkfifo

共享記憶體,函式mmap, shmget

訊號量,函式sem_init(...,1注意那個引數1socket

2. 執行緒間同步:

互斥鎖,函式pthread_mutex_...

讀寫鎖,函式pthread_rwlock_...

條件變數(不是鎖,本質是維護了個等待佇列),函式pthread_cond_...

訊號量,函式sem_init(...,0, ...)// 注意那個引數0

2樓:小菜鳥

執行緒間同步機制的原則包含:空閒讓進、忙則等待、有限等待、讓權等待;實現的方法包括:臨界區、互斥區、訊號量(這個對應的是允許多個執行緒訪問同一資源)和事件。

程序間的通訊主要有:管道(有親緣關係的程序)、命名管道、訊息佇列、套接字(socket)、共享記憶體、訊號量(這個對應的是生產者和消費者)。

3樓:簫哲

參考《UNIX環境高階程式設計》15.9

程序間互斥地訪問共享資源可以用訊號量、檔案鎖、互斥量

至於管道、socket、共享記憶體等都是在說IPC

4樓:

程序之間傳遞資訊的各種途徑(包括各種IPC機制)總結如下:父程序通過fork可以將開啟檔案的描述符傳遞給子程序

子程序結束時,父程序呼叫wait可以得到子程序的終止資訊

幾個程序可以在檔案系統中讀寫某個共享檔案,也可以通過給檔案加鎖來實現程序間同步

程序之間互發訊號,一般使用SIGUSR1和SIGUSR2實現使用者自定義功能

管道FIFO mmap函式,幾個程序可以對映同一記憶體區

SYS V IPC,以前的SYS V UNIX系統實現的IPC機制,包括訊息佇列、訊號量和共享記憶體,現在已經基本廢棄

UNIX Domain Socket,目前最廣泛使用的IPC機制

5樓:pansz

你的這些回答大多是用於執行緒,或者說程序內同步。

這些方法大多對程序與程序間沒法用或者不是常規用法。面試官很顯然無誤的是指的程序間,你的回答當然不準確,程序間確實一般不會用這種方法同步。

糾結通訊還是同步概念的各位,以及認為題主沒錯的各位,您們真覺得題主那些方法都適合用於程序?

我不認為乙個靠譜的教科書會告訴你用這些方法是實現程序間同步的標準方法。如果題主所說為真,我對現在教材的素質感到擔憂。

6樓:「已登出」

1. 你的答案確實是錯的,很多人解釋過了,人家問的是程序間同步,你回答的是執行緒間同步的機制

2. 但你們不要當那種考試考傻了的書呆子,把「同步」和「通訊」的概念分得那麼清楚,能通訊就一定是一種同步機制,這是顯而易見的。

3. 最後,如果你描述沒有錯,你面對的這個面試官也是個半桶水的。我們做面試,首先考慮的不是問題應該怎麼作答,我們首先考慮的是你能解決什麼問題,眼看你理解題意有誤,我的做法是直接告訴你這個知識點,然後繼續了解你對這個問題有多深,而不是為了難住你。

而至於面對乙個逗比面試官應該如何做,這是另乙個主題了,你需要另找答案或者單獨設問。

7樓:海納

我覺得,要麼是面試官說錯了,要麼是你聽錯了。

他的答案所對應的題面應該是IPC,就是程序間通訊。

你的答案所對應的題面應該是程序同步。其實,也不一定是程序了。任何可排程的作業,都可以使用訊號量,讀寫鎖等等辦法來控制。

比如,哲學家吃飯(誤),比如工廠訂單分配等等,不一定與計算機相關。

8樓:Xi Yang

Perl大駱駝書講了很多IPC機制:

用檔案裸奔:檔案的存在與否來當鎖,檔案內容來互動資料;

匿名管道;

semaphore,shared memory;

Unix socket,本機的TCP socket;

對了,還有最基本的程序signal。

9樓:蘇佳

你的題目寫的是程序同步,而面試官的說的都是程序通訊。是兩碼事。不知道是你誤解了面試官的意思,還是面試官自己搞錯了。

通訊有很多方式

1)管道

2)共享記憶體

3)訊息佇列

4)Socket

等,只要能交流就可以了。這個是IPC(Inter Process Communication)

而同步的方式主要是

1)Mutex(互斥)可以跨進城使用

2)Semphore(訊號量)可以跨進城使用等兩者適用範圍場合依據需求決定

PS:事件拿來控制同步也可以,說他是乙個通訊方式也可以。

如果配合起來可以是:

Case 1)

程序A將資料寫入共享記憶體(使用Mutex加鎖)程序B從共享記憶體中讀資料(也使用Mutex加鎖)Case 2)使用Semaphore實現的讀寫鎖程序A將資料寫入共享記憶體(加寫鎖)

程序B從共享記憶體中讀資料(加讀鎖)

效能比上面的好很多。

.NET寫共享記憶體的時候盡量寫入基本資料型別或者Structure資料效率較高,避免大範圍的系列化反序列化的動作影響效能。避免共享記憶體中又髒資料。

手機碼字回答的不夠全面還請見諒。

10樓:雷雨豪

程序間通訊機制:訊號、管道、Socket

互斥量:多執行緒訪問臨界區時使用

讀寫鎖:資料庫;多執行緒共享資源訪問

條件變數:與互斥量一起,在多執行緒訪問共享區域時,通知其他執行緒條件滿足

11樓:jamesr

請不要背書,很多時候自己背錯了書都不知道。你的答案是執行緒同步機制……各位說程序間只有通訊,執行緒才需要同步的,還說人家面試官錯了的,其實都是在背書……

程序間也有同步問題,而IPC是同步的實現手段。

如果我去面試,我回答:「我記不住那麼多,我可以試著說幾個,真需要用了,我會去翻APUE,選擇最合適的IPC方式」。不知道各位做面試官的評價如何?

linux下如何測量程序執行緒context switch花費的時間?

XZiar 最近課程需要,測了一波context switch的時間。首先繫結執行緒親和性是必要的。測時間方面直接用了 rdtscp。測試的思路就是,兩個執行緒各自記錄時間,通過主動觸發context switch來使兩個執行緒輪流獲得執行機會。通過計算兩個執行緒的時間差來得到context swi...

Linux系統中 程序 執行緒 時間片的關係?

zr scat 說幾點1,在核心裡的排程單元是task,執行緒或者程序沒有分別2,排程策略根據不同版本的核心不一樣,有搶占式的,非搶占式的,時間片由排程器根據當前task的狀態決定 3,高階別的任務會臨時打斷當前任務,比如中斷,timer,tasklet等 4,task主動出讓cpu也會引起排程,比...

如何訪問linux核心,讀取所有程序的task struct結構? dev mem 還是編寫驅動程式?

teawater 現有工具的話 KGTP就可以 KGTP 可以直接訪問也可以trace某個點的狀態 自己寫可以參考 Hui Zhu RFC 4 4 BloodTest task 對task結構的訪問 海楓 顧宇飛 的答案是正確的,不知為什麼沒有人讚。我以前也想過這個問題,能否在核心態匯出一些sysf...