POSIX 标准-信号量sem_t

信号量简介

信号量是一种同步机制,用于限制对共享资源的访问。它通常用于解决进程或线程间的同步问题,例如生产者-消费者问题。

  • 初始化:信号量需要在使用前通过sem_init函数进行初始化。
  • 等待:通过 sem_wait 函数使信号量减 1,如果信号量的值为 0,则调用线程会被阻塞,直到信号量的值大于 0。
  • 发布:通过 sem_post 函数使信号量加 1,如果有被阻塞的线程等待该信号量,则其中一个线程会被唤醒。
  • 销毁:通过sem_destory函数对信号量进行销毁。

信号量初始化:

sem_init(&entrySem, 0, 0);
sem_init(&slotSem, 0, BUFFER_SIZE);
entrySem 初始值为 0,表示缓冲区中元素个数。
slotSem 初始值为缓冲区大小,表示缓冲区中空闲槽的数量。

生产者线程:

sem_wait(&slotSem):空闲槽的数量减一。
生产数据并放入缓冲区。
sem_post(&entrySem): 缓冲区中元素个数加一。

消费者线程:

sem_wait(&entrySem):元素个数减一。
消费数据并从缓冲区取出。
sem_post(&slotSem):空闲槽的数量加一。

信号量销毁:

sem_destroy(&q->slotSem);
sem_destroy(&q->entrySem);

通过这种方式,信号量 entrySem 确保了对缓冲区的互斥访问,而 slotSem 控制了缓冲区中空闲和已用槽的数量,实现了生产者和消费者之间的同步。

相关推荐

  1. POSIX 标准-信号sem_t

    2024-07-16 19:00:07       20 阅读
  2. 【Linux】学习记录_15_POSIX信号

    2024-07-16 19:00:07       36 阅读
  3. Linux-线程同步(条件变POSIX信号

    2024-07-16 19:00:07       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 19:00:07       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 19:00:07       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 19:00:07       62 阅读
  4. Python语言-面向对象

    2024-07-16 19:00:07       72 阅读

热门阅读

  1. 文件访问:C/C++/MFC

    2024-07-16 19:00:07       20 阅读
  2. 常见数据库

    2024-07-16 19:00:07       24 阅读
  3. PLC中的高低字节如何理解?

    2024-07-16 19:00:07       22 阅读
  4. SpringBoot @Value注解优化

    2024-07-16 19:00:07       20 阅读