gpt4 book ai didi

setjmp - 使用信号处理程序和 setjmp/longjmp 实现抢占式微线程

转载 作者:行者123 更新时间:2023-12-02 00:42:43 25 4
gpt4 key购买 nike

我想在 Linux 环境中实现 POSIX 兼容的微线程。基本思路如下:

  1. 使用描述的技术 here , 为每个纤程分配新的栈空间。
  2. 使用 setitimer,创建将以固定时间间隔发送信号的计时器。此计时器的信号处理程序将充当调度程序并在纤程之间切换。

问题是,在信号处理程序中执行 longjmp 不会终止处理程序,因此内核将等待它终止,而不是传递新信号。这使得切换上下文变得不可能,因为没有启动切换的信号。一种解决方案是解除对 SIGALRM 的阻塞,如此多的信号可以同时执行处理程序,但这会导致竞争条件问题。

实现抢占式微线程的最好和最简单的方法是什么?我在 Google 上找到的所有示例都不是先发制人的。

最佳答案

解决方案是使用 sigsetjmp/siglongjmp,而不是 setjmp/longjmp。 sig* 版本保留信号掩码:)

关于setjmp - 使用信号处理程序和 setjmp/longjmp 实现抢占式微线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2077939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com