嵌入式学习记录——信号量

信号量的基本内容:

                 信号量是一种资源,可以被初始化、申请、释放、销毁

    P操作:申请资源
    V操作:释放资源

1.无名信号量:

1.sem_init  

int sem_init(sem_t *sem, int pshared, unsigned int value);

功能:
      初始化信号量

参数:
      sem:信号量空间首地址

      pshared:
        0 一个进程中的所有线程间共享
        非0 进程间共享 

      value:
        初始化的值

返回值:
      成功返回0 
      失败返回-1

 2.sem_destroy:

 int sem_destroy(sem_t *sem);

功能:
      信号量的销毁

参数:
      sem:信号量空间首地址

返回值:
      成功返回0 
      失败返回-1 

3. sem_wait:

 int sem_wait(sem_t *sem);

功能:
      申请信号量

4.sem_post:

    int sem_post(sem_t *sem);

功能:
      释放信号量

2.有名信号量:

 1.创建   semget 

 int semget(key_t key, int nsems, int semflg);

功能:
            创建一组信号量
参数:
            key:IPC对象名
            nsems:信号量的个数
            semflg:IPC_CREAT 
返回值:
            成功返回信号量ID
            失败返回-1 

   2.销毁  semctl

    int semctl(int semid, int semnum, int cmd, ...);

功能:   
            向信号灯发送命令
参数:
            semid:    信号灯ID号
            semnum:具体操作信号量的编号
            cmd:
                IPC_RMID    删除信号灯
                SETVAL      设置信号量的值

返回值:
            成功返回0
            失败返回-1 

 初始化:                                                                   【要在全局区定义】
        union semun {
            int              val;                          /* Value for SETVAL */
            struct semid_ds *buf;               /* Buffer for IPC_STAT, IPC_SET */
            unsigned short  *array;            /* Array for GETALL, SETALL */
            struct seminfo  *__buf;            /* Buffer for IPC_INFO(Linux-specific) */
        };

3.申请信号量 / 释放信号量   semop 

int semop(int semid, struct sembuf *sops, size_t nsops);

功能:
            对信号量完成操作
参数:
            semid:信号灯的ID号
            sops:信号量操作的数组首地址
            nsops:数组元素个数
返回值:
            成功返回0 
            失败返回-1 

    unsigned short sem_num;                  /* semaphore number */        操作信号量的下标
         short          sem_op;                      /* semaphore operation */     具体对信号量的操作(申请:-1  释放:+1)
         short          sem_flg;                      /* operation flags */         SEM_UNDO

        

 

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值