C,C ++中重入代码的推荐实践

时间:2010-07-13 18:30:46

标签: c++ c reentrancy

在编写可重入代码时,我正在通过re-entrancy guide推荐的做法。

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

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

4 个答案:

答案 0 :(得分:2)

  • 使用局部变量。
  • 不要使用静态本地变量或全局变量,即使TLS也无法帮助您进行递归/重入。
  • 在进行回调之前恢复所有不变量。
  • 进行回调时不要握住锁。如果你绝对必须(我仍然会寻找避免它的方法),那么请确保你知道如果你试图在已经拥有它的线程上重新输入锁定会发生什么。至少你必须对此进行测试,否则根据锁定,你会遇到死锁或破坏不变量(即腐败)。

答案 1 :(得分:1)

没有。编写非重新输入代码通常比重新编写代码更困难。只要遵循这些简单的指导原则,不要试图做任何太过闷闷不乐的事情,你会没事的。

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

答案 2 :(得分:0)

指南就足够了。

对于重新输入代码,我的个人经验规则只有2:

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

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

答案 3 :(得分:0)

  1. 可重入函数不能以非原子方式使用变量,除非它们是 存储在调用任务的堆栈上,或者是该任务的私有变量。
  2. 可重入函数可能不会调用其他不可重入的函数。
  3. 可重入函数可能无法以非原子方式使用硬件。
  4. 参考:Page 462 [引言使用 RENESAS RX62N微控制器] [James M. Conrad]