谁能告诉我如何在 C 函数内的随机位置插入函数调用(例如 Yield()
),以便每次运行代码时, Yield()
从代码的不同部分调用?
当我在协作线程环境 中使用 2 个线程时,我遇到了这样的要求,除非正在运行的线程显式让出处理器,否则其他(等待)线程无法开始运行。我不想将 Yield()
调用放在一个点上,因为这会使线程序列具有确定性。无需重新布线整个环境(从协作到先发制人),这是我能想到的唯一解决方案,其中 Thread_1() 在其中的随机位置进行 Yield()
调用,允许 Thread_2( ) 接管。
也欢迎任何对实现相同最终目标的不同解决方案的见解!
最佳答案
我认为需要 BFI 解决方案
我认为你必须以显而易见的方式解决这个问题。您需要为 Yield()
制作一个包装器,以“随机”决定是否调用真实的东西。
如果您不关心执行速度,那么我会把它变成一个真正的 C 函数,如果您关心的话,我可能会建议您使用预处理器宏。
所以,像这样:
#define Yield0() ((random() & 0xf) == 0 && Yield())
为您想要的调用机会百分比选择掩码。对于 0xf,如果 random()
具有良好的低位随机性,那么您将在 16 次调用中看到 1 次 Yield()。如果您可以使用 MT 或其他高质量随机数生成器,低位将直接有用,否则您可能需要 random() >> 3 & ...
你只需要在任何地方调用 Yield0()。
关于c - 如何从另一个函数内的随机位置调用 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1885903/