“折返函数”的定义

时间:2014-01-14 12:34:13

标签: function concurrency interrupt conceptual reentrancy

我看过几篇帖子要求或回答解释什么是重入,但没有人请求一个精确的定义,所以这里有:

“可重入函数”概念的精确定义是什么?

3 个答案:

答案 0 :(得分:0)

根据我目前的理解,我建议采用以下定义。

当且仅当以下内容适用于函数F时,函数F才是可重入

对于F中的任何两个调用A和B,如果

  • 条件1)呼叫B在呼叫A开始但在完成之前开始

  • 条件2)呼叫A仅在呼叫B完成后恢复

  • 条件3)如果孤立的话,A和B都会成功(*)

,然后,在没有干扰外部事件的情况下(例如断电,不相关线程中的seg故障等)

  • 保证1)电话A保证成功(*)

  • 保证2)保证呼叫B 成功(*)

(*)读取成功 = 完成并产生正确的结果和副作用

请注意,这对于线程安全是不够的,因为它不能保证在调用B完成之前调用A恢复时会发生什么。

答案 1 :(得分:0)

如果一个函数可以被不同的线程同时调用,它具有相同的行为和结果,就好像它只被一个线程调用一样。

答案 2 :(得分:0)

没有单一的定义" reentrant&#34 ;;这取决于具体情况。特别是,C ++标准根本没有提到它。它通常意味着一个函数在被多个线程同时调用时具有明确定义的行为,需要或不需要某些锁定,但它也可能意味着例如一个函数可以再次递归地由同一个线程调用。可重入的概念可适用于除功能之外的其他事物,例如在C标准中,您可以找到文本:

  

锁是可重入的:单个线程可以在给定时间多次保持锁定。