• 信号量学习


    (一)概念
    信号量是一个整数,这个整数允许多进程或多线程同步他们的操作。这个整数必须大于等于0.

    linux库函数中,类似有名映射、匿名映射,有名管道、无名管道,信号量也有有名信号量和匿名信号量。匿名信号量在内存中,不在文件系统中,一般用于线程之间的同步;有名信号量需要创建文件,一般用于进程之间的同步。有名信号量见:有名信号量

    (二)匿名信号量库函数
    #include <semaphore.h>
    int sem_init(sem_t *sem, int pshared, unsigned int value);
    功能:初始化一个匿名信号量
    参数:
    sem 指定了要初始化的信号量的地址
    pshared 0 多线程 非0 多进程
    value 指定了信号量的初始值
    返回值:
    成功 0
    错误 -1 errno被设置

    #include <semaphore.h>
    int sem_destroy(sem_t *sem);
    功能:销毁一个匿名信号量
    参数:
    sem 指定要销毁的匿名信号量的地址
    返回值:
    成功 0
    错误 -1 errno被设置

    #include <semaphore.h>
    int sem_post(sem_t *sem);
    功能:信号量的值加1操作.如果因此变为大于0.等待信号量的值变为大于0的进程或线程被唤醒,继续对信号量的值减一.
    参数:
    sem 指定具体的信号量
    返回值:
    成功 0
    错误 -1 errno被设置 信号量的值不变

    #include <semaphore.h>
    int sem_wait(sem_t *sem);
    功能:减一操作 如果当前信号的值大于0,继续立即返回.
    如果当前信号量的值等于0.阻塞,直到信号量的值变为大于0.
    参数:
    sem 指定具体的信号量
    返回值:
    成功 0
    错误 -1 errno被设置 信号量的值不变

    int sem_trywait(sem_t *sem);
    功能:尝试wait,不阻塞

    int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
    功能:带时间的wait

    参考博客:https://blog.csdn.net/u013511885/article/details/103116998?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-3-103116998.pc_agg_new_rank&utm_term=c%E8%AF%AD%E8%A8%80%E4%BF%A1%E5%8F%B7%E9%87%8F%E6%9C%BA%E5%88%B6&spm=1000.2123.3001.4430

  • 相关阅读:
    java8 日期时间之间的关系
    redis bind连不上的坑
    mysql 表结构转excel表格
    软件工程实践总结
    Beta答辩总结
    Beta 冲刺(7/7)
    Beta 冲刺(6/7)
    Beta 冲刺(5/7)
    Beta 冲刺(4/7)
    Beta 冲刺(3/7)
  • 原文地址:https://www.cnblogs.com/home123/p/15604012.html
Copyright © 2020-2023  润新知