在 Lock::ConditionVariable 中§
有关方法 signal,请参见主要文档 in context
method signal()
当且仅当有任何线程先前在条件变量上等待时,它才会解除其中至少一个线程的阻塞。让我们看看它在这个示例中的工作原理
constant ITEMS = 100;for 1..15 ->
我们重复 15 次相同的操作:启动 100 个线程,每个线程修改数组中的单个元素。我们protect
全局变量 $done
的修改,并使用 signal
唤醒另一个线程去做它的工作。这将输出生成数组的第一个元素。
在 Proc 中§
有关方法 signal,请参见主要文档 in context
method signal(Proc:)
返回外部进程被终止时的信号号,否则返回 0
或未定义的值。
在 Supply 中§
有关子例程 signal,请参见主要文档 in context
sub signal(*, : = )
为指定的信号枚举(例如 SIGINT)和一个可选的 :scheduler
参数创建一个供应。收到的任何信号都将在供应中发出。例如
signal(SIGINT).tap( );
将捕获 Control-C,表示感谢,然后退出。
要从信号号转到 Signal,你可以执行类似这样的操作
signal(Signal(2)).tap( -> );
可以通过检查 Signal::.keys
(就像检查任何枚举一样)来查找受支持信号的列表。有关枚举工作原理的更多详细信息,请参见 enum。
注意: Rakudo 2018.05 及更早版本存在一个错误,导致某些系统上的信号数值不正确。例如,Signal(10)
返回 SIGBUS
,即使它在特定系统上实际上是 SIGUSR1
。也就是说,在 2018.04、2018.04.1 和 2018.05 以外的所有 Rakudo 版本中,使用 signal(SIGUSR1)
都可以按预期工作,在这些版本中,可以通过使用 signal(SIGBUS)
来实现预期行为。这些问题已在 2018.05 之后的 Rakudo 版本中得到解决。
在 Kernel 中§
有关方法 signal,请参见主要文档 in context
multi method signal(Kernel: Str --> Int)multi method signal(Kernel: Signal \signal --> Int)multi method signal(Kernel: Int \signal --> Int)
返回给定名称的 Kernel 对象的 Signal
数值代码的实例方法。
say .signal("INT"); # OUTPUT: «2»