c - 希望信号量超过 SEM_VALUE_MAX

标签 c posix max semaphore

我正在开发一个带有临界区的程序,所以我使用了信号量。具体来说,POSIX 信号量:http://www.kernel.org/doc/man-pages/online/pages/man3/sem_close.3.html

根据 http://www.sbin.org/doc/glibc/libc_34.html (搜索:macro SEM_VALUE_MAX ),一般信号量有一个可以设置的最大值。在我的系统上,这大约是 32K。

不幸的是,我正在处理一些对时间敏感的代码(通过串行端口以 ~1MBit/s 的速度从 arduino 读取数据),所以我想要更大的信号量,因为有一些实现细节。理想情况下,我希望它们至少能够达到 2^20,但我有点不清楚为什么还有上限。

有什么办法可以超过这个SEM_VALUE_MAX,得到一个更大值的信号量吗?我只能想到:

  1. 重新定义 SEM_VALUE_MAX
    • 可能是个糟糕的想法;我认为那些 POSIX 人员知道他们在做什么
  2. 让信号量引用多个数据“ block ”
    • 现在,每个 up() 或 down() 只获取/释放一个“ block ”——一个无符号短整数。
    • 我想一次处理多个可能会导致死锁。
  3. 实现我自己的信号量。
    • 耗时/多余的工作
    • 不太便携
  4. 问问你们这些好人的想法!

提前致谢!

最佳答案

您不能只使用信号量来保护对您用来跟踪分配的另一个计数器的访问。这样一来,您不需要比访问器更多的信号量值。

关于c - 希望信号量超过 SEM_VALUE_MAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13919050/

相关文章:

c - 为什么数组的元素比类型大?

c - 如何求数组的长度

c - gdb中如何处理单行换行成多行?

c++ - 仅列出目录中的文件夹

c - 使用共享内存时如何处理被杀(kill -9)?

c - C 中赋值操作的未知行为

c - 如何覆盖系统c库头?

constraints - 玩! - 最大约束不起作用

sql - Max() 中的自定义排序

python - 在一行中获取 lambda 的最大值及其键