我正在考虑编写一个用户态线程库,因为在这个领域似乎没有积极的工作,我相信 C++0x 的承诺和未来可能会给这个模型一些力量。不幸的是,为了使这个模型工作,必须确保阻塞调用的上下文切换。因此,我想拦截每个系统调用,以便用异步版本替换它。有一些警告:
- 我知道几乎每个常规系统调用都有异步系统调用,但出于向后兼容性的原因,这不是一个可行的解决方案。
- 我知道在 Linux 2.4 或更早版本中可以直接更改 sys_call_table,但这已经消失了。
- 因为我希望我的库在需要时被静态链接,所以 LD_PRELOAD 技巧是不可行的。
- 同样,内核模块也不是一个选项,因为它应该是一个用户态库。
- 最后,出于类似原因, ptrace() 也不是一个选项。我不能让我的图书馆为了使用而分叉一个新进程。
这可能吗?