-
信號量操作
鎖定
信號量操作是一個計算機編程術語。
- 中文名
- 信號量操作
- 外文名
- semop
信號量操作簡介
struct semid_ds { struct ipc_perm sem_perm; /* operation permission struct */ struct sem *sem_base; /* ptr to first semaphore in set */ ushort_t sem_nsems; /* # of semaphores in set */ #if defined(_LP64) time_t sem_otime; /* last semop time */ time_t sem_ctime; /* last change time */ #else /*_LP64*/ time_t sem_otime; /* last semop time */ int32_t sem_pad1; /* reserved for time_t expansion */ time_t sem_ctime; /* last change time */ int32_t sem_pad2; /* time_t expansion */ #endif /*_LP64*/ int sem_binary; /* flag indicating semaphore type */ long sem_pad3[3]; /* reserve area */ };
信號量操作解釋
系統會對傳遞給semget(2)的關鍵字的值進行檢查來查看這個信號量是否已經存在了,並通過使用ipc支持例程ipcaccess()進行權限檢查。信號量的權限和我們在Solaris文件中使用的權限模式有點不同。這些權限被定義程READ和ALTER,這樣進程就可以讀取當前信號量的值或者對該值進行修改(增大/減小)。這兩個權限是通過傳遞給semget(2)調用的參數來建立的,它使用Solaris文件權限中通用的屬主、組和其他用户的概念。
假設有一個新的信號量,根據緊接的下一步操作就是對信號量值進行初始化。初始化操作使用semctl(2)調用來實現,它使用SETVAL來設置某個時間點上這個集合中每個信號量的值(或者這個集合中只用一個信號量,那麼就設置這個信號量的值),或者使用SETALL來設置一個操作中該集合中所有信號量的值。內核的實際流程是明確的,它使用期望的權限和值對可能的最大值進行檢查,如果所有的檢查都通過了,那麼久設置用户定義的值。
應用程序代碼對信號量的實際使用會調用semop(2)系統調用。semop(2)調用使用信號量的ID(由semget(2)返回)、一個指向sembuf結構的指針和信號量操作的個數作為參數。sembuf結構包含一下元素。
struct sembuf { ushort_t sem_num; /* semaphore # */ short sem_op; /* semaphore operation */ short sem_flg; /* operation flags */ };
信號量操作補充信息
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:11次歷史版本
- 最近更新: JD萤火虫003