【发布时间】:2010-12-25 13:08:33
【问题描述】:
谁能告诉我如何在 C 函数内的随机位置插入一个函数调用(比如 Yield() ),这样每次运行代码时,Yield() 都会从不同的地方调用部分代码?
我面临这样的要求,因为我在协作线程环境中使用 2 个线程,除非正在运行的线程显式地让出处理器,否则另一个(等待)线程无法开始运行。我不想将Yield() 调用放在一个点上,因为这会使线程序列具有确定性。在不重新连接整个环境(从合作到先发制人)的情况下,这是我能想到的唯一解决方案,其中 Thread_1() 在其中的随机位置进行 Yield() 调用,从而允许 Thread_2() 接管。
也欢迎对实现相同最终目标的不同解决方案的任何见解!
【问题讨论】:
-
当您说“每次运行代码”时,您是指“运行”还是“编译”?另外,“Yield()”是做什么的,为什么要在随机位置插入它,周围的代码是做什么的(数学?打印东西?等等)?
-
如果你想实现协程,请查看stackoverflow.com/questions/1635827/… 了解一些想法
-
+1 链接! @Chris,理想情况下,我更喜欢“运行” - 只有在完全不可能的情况下,然后“编译”。 Yield() 用于将处理器控制权交给任何其他等待线程 - 这是强制线程放弃控制权的唯一方法(对我可用)。周围的代码实际上正在执行一组操作,这些操作会改变硬件中的某些内容——但我认为这没有任何意义;我们可以假设我们正在做一些复杂的计算!
标签: c multithreading random c-preprocessor