C、C++ 中可重入代码的推荐做法

发布于 2024-09-09 15:53:49 字数 196 浏览 8 评论 0原文

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

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

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

I was going through a re-entrancy guide on recommended practices when writing re-entrant code.

What other references and resources cover this topic?

What lint-like tools can be used to check for these issues?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

柏林苍穹下 2024-09-16 15:53:49
  • 一定要使用局部变量。
  • 不要使用静态局部变量或全局变量,即使 TLS 也无法帮助您进行递归/重入。
  • 在执行回调之前恢复所有不变量。
  • 进行回调时不要持有锁。如果你绝对必须(并且我仍然会寻找一种方法来避免它),那么请确保你知道如果你尝试在已经持有它的线程上重新输入锁会发生什么。至少你必须对此进行测试,否则根据锁的不同,你会遇到死锁或破坏不变量(即损坏)。
  • Do use local variables.
  • Don't use static locals or global variables, even TLS will not help you with recursion / reentrancy.
  • Restore all your invariants before doing callbacks.
  • Don't hold locks while you do callbacks. If you absolutely must (and I would still go looking for a way to avoid it) then make sure you know what happens if you try to re-enter your lock on the thread that already holds it. At a minimum you have to test for this, otherwise depending on the lock you'll get deadlocks or broken invariants (i.e. corruption).
冷默言语 2024-09-16 15:53:49

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

不可重入代码通常是为了高性能问题而编写的。

None really. Writting non-reentering code is usually more difficult than re-entring. Just follow those simple guidelines and don't try to do anything too waky and you'll be fine.

Non-reentering code is usually written for high-performance issues.

缱倦旧时光 2024-09-16 15:53:49

指南就足够了。

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

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

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

The guide is sufficient.

My personal rule of thumbs are only 2 for re-reentering code:

  1. take only pass by value parameters, used only value passed in as parameters in the function.

  2. if I need to use any global parameters or pointer (for performance or storage sake), use a mutex or semaphore to control access to it.

只等公子 2024-09-16 15:53:49
  1. 可重入函数不能以非原子方式使用变量,除非它们是
    存储在调用任务的堆栈上或者是该任务的私有变量。
  2. 可重入函数不能调用其他不可重入函数。
  3. 可重入函数不能以非原子方式使用硬件。

参考:第 462 页 [使用介绍
瑞萨 RX62N 微控制器] [James M. Conrad]

  1. A reentrant function may not use variables in a non-atomic way unless they are
    stored on the stack of the calling task or are the private variables of that task.
  2. A reentrant function may not call other functions which are not reentrant.
  3. A reentrant function may not use the hardware in a non-atomic way.

Ref: Page 462 [AN INTRODUCTION USING THE
RENESAS RX62N MICROCONTROLLER] [James M. Conrad]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文