7

在编写可重入代码时,我正在阅读有关推荐实践的重入指南。

还有哪些其他参考资料和资源涵盖了该主题?

可以使用哪些类似 lint 的工具来检查这些问题?

4

4 回答 4

2
  • 一定要使用局部变量。
  • 不要使用静态局部变量或全局变量,即使 TLS 也无法帮助您进行递归/重入。
  • 在进行回调之前恢复所有不变量。
  • 在进行回调时不要持有锁。如果您绝对必须(而且我仍然会寻找一种避免它的方法),那么请确保您知道如果您尝试重新进入已经持有它的线程上的锁会发生什么。至少您必须对此进行测试,否则根据锁,您将获得死锁或损坏的不变量(即损坏)。
于 2010-07-14T02:14:00.213 回答
1

真的没有。编写非重新输入的代码通常比重新输入更困难。只要遵循这些简单的指导方针,不要试图做任何过于清醒的事情,你会没事的。

非重新输入代码通常是针对高性能问题编写的。

于 2010-07-13T18:44:12.243 回答
0

指南就足够了。

我个人的经验法则只有 2 用于重新输入代码:

  1. 只取值传递参数,只使用函数中作为参数传入的值。

  2. 如果我需要使用任何全局参数或指针(出于性能或存储考虑),请使用互斥锁或信号量来控制对它的访问。

于 2010-07-14T02:04:16.713 回答
0
  1. 可重入函数不能以非原子方式使用变量,除非它们存储在调用任务的堆栈中或者是该任务的私有变量。
  2. 一个可重入函数不能调用其他不可重入的函数。
  3. 可重入函数不能以非原子方式使用硬件。

Ref: 第 462 页 [使用瑞萨电子 RX62N 微控制器的介绍] [James M. Conrad]

于 2014-10-09T15:20:40.387 回答