我理解,从信号处理函数var input = 'this is a test string <a href="https://example.com" ui-link="https://example.com">example</a>, and this is another test string <a href="http://example2.com">example 2</a>.'
var output = convertString(input);
output should equal: 'this is a test string <a target="_blank" href="https://example.com" ui-link="https://example.com">example</a>, and this is another test string <a target="_blank" href="http://example2.com">example 2</a>.'
我应该只调用那些“异步安全”的函数。但为什么会这样呢?
答案 0 :(得分:1)
调用不安全的函数可能会导致未定义的行为。
Open Group Base Specifications Issue 7(POSIX.1-2008)在处理"Signal Concepts"时说:
[W]如果信号中断了一个不安全的函数......并且信号捕获函数调用了一个不安全的函数,则行为未定义。
至于为什么不安全的函数是不安全的,在给定的实现中可能有很多原因。
然而,标准的先前版本第6期(POSIX.1-2004)暗示了某些实现的一个可能原因。该版本将异步信号安全功能描述为"either reentrant or non-interruptible by signals"。因此,考虑一个依赖于静态数据来保持状态但在执行中途自身中断的函数 - 一旦控制返回到被中断的函数,该数据是否可以被信任?