理論基礎:
wait()
:
system();
exec函式族:
exit()
:
多執行緒相關:
pthread_create()
:
如果呼叫該函式成功建立了乙個執行緒,那麼該執行緒的id會儲存在thread引數中。這個標誌會在其他的函式中用到。
pthread_join()
:
pthread_detach()
:
pthread_self()
:
pthread_equal
:
pthread_exit()
:
執行緒同步機制:
互斥:pthread_mutex_init()
、pthread_mutex_destroy()
:
pthread_mutex_init()
:
pthread_mutex_lock()
、pthread_mutex_trylock()
和pthread_mutex_unlock
:
pthread_mutex_trylock()
pthread_mutex_unlock()
讀寫鎖:
``pthread_rwlock_init()、
pthread_rwlock_destory()`:
pthread_rwlock_rdlock()
:
pthread_rwlock_wrlock()
:
pthread_rwlock_unlock()
:
條件變數:
thread_cond_init()
、thread_cond_destory()
thread_cond_wait()
、thread_cond_timedwait()
:
thread_cond_signal()
、thread_cond_broadcast()
:
共享記憶體相關:
shmget()
:
shmat()
、shmdt()
:
shmctl()
:
附錄1(摘自網路):
字尾引數
l接收以逗號為分隔的引數列表,以null為結束符
v接收以null為結束的字串陣列
p接收以null為結束的字串陣列指標,並可以利用dos的path變數查詢子程式檔案
e傳遞環境變數。
附錄2(摘自網路):
不在函式內部使用靜態或全域性資料。
不返回靜態或全域性資料,所有資料都由函式的呼叫者提供。
使用本地資料,或通過拷貝全域性資料到本地來保護全域性資料。
不呼叫不可重入性函式。
附錄三(翻譯自man手冊):
巨集名稱意義
ipc_creat
建立乙個新的段,如果這個標誌沒有被使用,shmget()函式將會尋找與這個段相對應的key引數值,並且檢查使用者是否有讀取這個段的許可權。
ipc_excl
該標誌與ipc_breat一起被用作確認本次建立共享記憶體的呼叫成功與否。
ipc_private
它不是乙個標誌字段,而是乙個key_t型別的值,如果函式呼叫的時候key引數中儲存這個特殊的值,系統呼叫會忽略除了shm***中最不重要的9位意外的所有並且建立乙個新的共享記憶體。
ipc_stat
從核心中拷貝shmid中由buf指向的shmid_ds結構相關的資料結構資訊。對於共享記憶體段呼叫者必須擁有可讀許可權。
ipc_set
往引數buf指標指向的shmid_ds結構體的某些成員寫入與該共享記憶體段相關聯的核心資料結構,並且更新該結構體中的shm_ctime成員。以下成員可能會被改變:shm_perm.uid、shm_perm.gid和(最不重要的九位)shm_perm.mode。呼叫程序的有效uid必須與擁有者(shm_perm.uid)或共享記憶體的建立者(shm_per.cuid)相匹配,或者與一定是擁有特權的呼叫者相匹配。
ipc_rmid
標記被銷毀的共享記憶體段,實際上,這個共享記憶體段實在程序銷毀的時候被銷毀。(當shmid_ds相關構成員shm_nattch為空的時候)。呼叫者必須是共享記憶體的擁有者或者建立者,或者擁有特權。buf引數被忽略。
shm_noresreve
(從linux核心2.6.15以後)這個標誌與mmap()函式的map_noreserve 標誌具有同樣的目的。不保留交換空間對於共享記憶體段,當交換空間被保留了,他會保證共享記憶體是可用的。當交換空間沒有被保留,並且物理記憶體不可用,那麼可能會在寫入時獲取sigsegv。也可以查閱/proc/sys/vm/overcommit
檔案。
shm_remap
(linux特有)這個標誌指定了在共享記憶體段中從shmaddr引數開始到段最後的範圍內的段對映應該被替換成現有的對映。(一般情況下,乙個einval錯誤可能是由於乙個對映在位址範圍內已經存在)在這個案例中,shmaddr引數必須不為空。
shm_rdonly
以唯讀的方式鏈結共享記憶體段。程序對共享記憶體段必須有讀取許可權。如果標誌沒有被指定,那麼共享記憶體段會被以可讀可寫方式鏈結,並且程序對於該共享記憶體段必須擁有可讀和可寫許可權。但這不意味著對共享記憶體段有只寫許可權。
shm_exec
(linux特有,從linux2.6.9以後)允許執行共享記憶體段中的內容。呼叫者對於共享記憶體段必須擁有可執行許可權。
shm_hugetlb
(從linux核心2.6版以後)為共享記憶體段分配巨大空間,詳情見linux核心原始碼檔案中documentation/vm/hugetlbpage.txt
獲取更多資訊。
shm_huge2mb,shm_huge1gb
(從linux核心3.8之後)與shm_hugetlb一起被用作選擇替代hugetlb大頁面的大小(分別是2mb和1gb),並且支援超過hugetlb大頁面的大小。
程序 共享記憶體
swoole 本身也是個多程序模型。有多個 worker 程序和 master 程序。由於程序之間的變數時不能相互通用的。所以應該怎樣實現程序之間的通訊呢?作業系統中實現程序通訊的方法有多種,其中一種是共享記憶體 是作業系統內比較特殊的一種記憶體,他並不依賴於任何的程序也不屬於任何程序 可以呼叫系統...
程序通訊 共享記憶體 聽課筆記
多個程序共享一段物理記憶體 是程序間共享資料最快的方法 size x large 步驟 size 1 建立共享記憶體,使用shmget函式 2 對映共享記憶體,使用shmat函式,將共享記憶體對映到具體的程序空間去 3 解除對映共享記憶體,使用shmdt函式 4 刪除共享記憶體,使用shmctl函式...
學習筆記之共享記憶體
共享記憶體 共享記憶體是程序間通訊方式中效率最高的一種,因為程序可以對記憶體進行直接讀寫,而沒有複製等其他操作,共享記憶體在核心中被建立,用時對映在使用者空間,在使用者空間操作。由於多個程序可同時訪問共享記憶體,因此需要同步和互斥機制配合使用 一 函式介面 申請key值,除建立共享記憶體以外的程序需...