与此问题类似,我想在 C 中限制函数的执行时间——最好以微秒级的精度进行。我想 C++ 异常可用于实现类似于此Python 解决方案的结果。虽然并不理想,但这种方法在纯 C 语言中完全不可用。
那么,我想知道,在 Posix 系统上的 C 语言中的某个时间间隔之后,我如何中断函数的执行?对于相对简单的情况,一些愚蠢的业务工作得很好,但这会增加大量与问题解决方案正交的代码。假设我有这样的功能:
void boil(egg *e) {
while (true)
do_boil(e);
}
我想在一个鸡蛋上运行煮沸*,每 50μs 中断一次以检查是否执行以下操作:
egg *e = init_egg();
while (true) {
preempt_in(50, (void) (*boil), 1, e);
/* Now boil(e) is executed for 50μs,
then control flow is returned to the
statement prior to the call to preempt_in.
*/
if (e->cooked_val > 100)
break;
}
我意识到可以使用 pthreads 来执行此操作,但我更感兴趣的是避免使用它们。我可以在 SIGALRM 处理程序中在 ucontext_t 之间切换,但是 POSIX 标准指出,setcontext/swapcontext 的使用不能在信号处理程序中使用,实际上,我注意到 Linux 和 Solaris 系统在这样做时的不同行为。
这种效果能达到吗?如果是这样,以便携式方式?