信号量

信号量主要用于进程间或和外部系统进行通信。

系统内置 256 个信号量,下标从 0 开始到 255。每个信号量都可以存储一个 32 位整数类型值,取值范围 -2147483648~2147483647。

系统重新启动后,所有信号量都会被重新置为 0。

设置信号量 auto_sync

  • 函数名:lua模块的函数set_signal
  • 参数:
    1. index: [int] 信号量下标
    2. value: [int] 待设置的信号量值
  • 返回:[bool] 是否设置成功

示例程序

set_signal(1, 100)

增加信号量数值 auto_sync

  • 函数名:lua模块的函数add_signal
  • 参数:
    1. index: [int] 信号量下标
    2. value: [int] 待增加的信号量值
  • 返回:[int] 增加后的信号量值。有可能产生溢出

示例程序

add_signal(1, 2)
print(get_signal(1))

设置多个信号量 auto_sync

  • 函数名:lua模块的函数set_signals
  • 参数:
    1. index: [int] 信号量起始下标
    2. values: [list[int]] 待设置的信号量值
  • 返回:[bool] 是否设置成功

示例程序

set_signals(1, {1, 2, 3})

获取信号量

  • 函数名:lua模块的函数get_signal
  • 参数:
    1. index: [int] 信号量下标
  • 返回:[int] 对应的信号量值

示例程序

print(get_signal(1))

获取多个信号量

  • 函数名:lua模块的函数get_signals
  • 参数:
    1. index: [int] 信号量起始下标
    2. len: [int] 待获取的信号量数量
  • 返回:[list[int]] 信号量值数组

示例程序

values = get_signals(1, 3)
print(values)

等待信号量 auto_sync

阻塞等待信号量满足指定条件。

  • 函数名:lua模块的函数wait_signal
  • 参数:
    1. index: [int] 信号量下标
    2. value: [int] 待比较的值
    3. relation: [str] 关系判断操作符
  • 返回:[bool] 是否满足条件

示例程序

wait_signal(1, 100, ">=")

示例

set_signal(1, 2147483647)
print(get_signal(1))
add_signal(1, 2)
print(get_signal(1))

兼容说明

signal_set、signal_get、signal_wait、signal_add 分别为 set_signal、get_signal、wait_signal、add_signal 的别名。