1

我正在开发一个带有关键部分的程序,所以我正在使用信号量。具体来说,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. 信号量指的是不止一个“块”数据
    • 现在,每个 up() 或 down() 只获取/释放一个“块”——一个无符号的短整数。
    • 我想一次处理多个可能会导致死锁。
  3. 实现我自己的信号量。
    • 耗时/多余的工作
    • 便携性较差
  4. 问问你很棒的人你的想法!

提前致谢!

4

2 回答 2

2

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

于 2012-12-17T17:36:20.400 回答
1

你需要你的程序有多便携?_POSIX_SEM_VALUE_MAX是符合 POSIX的最小值SEM_VALUE_MAX始终允许较大的值。glibc 和我熟悉的其他实际实现SEM_VALUE_MAX定义了更大的,通常等于INT_MAX. 您需要担心这一点的唯一方法是,如果您希望您的程序可移植到其他具有非常低SEM_VALUE_MAX.

于 2012-12-17T18:24:15.157 回答