c - 如何从另一个函数内的随机位置调用 C 函数?

标签 c multithreading random c-preprocessor

谁能告诉我如何在 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/

相关文章:

c++ - 程序输出的随机数序列与 Linux 上的实际 rand() 输出不匹配(在 Windows 上工作正常)

java - 为什么我的方法有时会打印多行?

javascript - 在 Javascript/jquery 中为数独游戏生成一个随机数组

c - 在 C 函数中返回二维数组

c - G-wan C Sha1 散列

java - 一个线程可以直接让另一个线程等待吗?

c++ - 如何在不同线程的 C++/CLI 中将图像数据从 BitmapSource (WPF) 复制到 cv::Mat (OpenCV)?

Java 执行器通过内部执行器超时取消作业

c - 在 C11 中,如何在编译时在带有浮点参数的函数与浮点指针之间进行选择

C - 如何计算文件中每个单词的出现次数并删除重复单词