Skip to content

Latest commit

 

History

History
86 lines (64 loc) · 1.5 KB

semaphore.md

File metadata and controls

86 lines (64 loc) · 1.5 KB

Semaphore(信號量) Back

  • 信號量主要提供對進程間共享資源訪問的控制機制.
  • 可用於訪問控制進程間同步
  • 類型:
    • 二值信號量: Boolean類型
    • 計數信號量: 非負值

0. Header Files

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

1. Create

  • 调用成功時, 初始化相應的控制塊信息

#####method

int semget(key_t key, int nsems, int flags)

#####parameters

  • key: 鍵值, 由ftok()獲取
    • IPC_PRIVATE: key由系統分配
  • nsems: 信號量數
  • flags: 操作標誌, 決定了信號量組的創建方式和權限

#####return value

  • 0: 信號量組標識符

  • -1: failure

2. Operation

#####method

int semop(int sid, struct sembuf** ops, unsigned nops)

/* sembuf */
struct sembuf
{
	short sem_num;  /* 信号量编号,從0開始 */
	short sem_op;   	/* 要執行的操作 */
	short sem_flg;  	/* 操作標誌 */
};

#####parameters

  • sid: semget()返回的信號量組標識符
  • ops: 操作的數據結構
  • nops: 操作的個數

#####return value

  • 0: success
  • -1: failure

3. Control

#####method

int semctl(int sid, int snum, int cmd, union semun arg)

/* semun */
union semun
{
	int val;
	struct semid_ds* buf;	/* 指針信號量組控制塊的指針 */
	ushort* array;
};

#####parameters

  • sid: semget()返回的信號量組標識符
  • snum: 信號燈編號
  • cmd: 命令

#####return value

  • 0: success(與cmd相關)

  • -1: failure