【发布时间】:2011-09-17 22:27:21
【问题描述】:
我正在考虑写一个userland threading library,因为在这个领域似乎没有积极的工作,我相信C++0x promises and futures 可能会给这个模型一些力量。不幸的是,为了使这个模型工作,必须确保阻塞调用的上下文切换。因此,我想拦截每个系统调用,以便用异步版本替换它。有一些注意事项:
- 我知道几乎每个常规系统调用都有异步系统调用,但出于向后兼容性的原因,这不是一个可行的解决方案。
- 我知道在 Linux 2.4 或更早版本中可以直接更改 sys_call_table,但这已经消失了。
- 由于我希望我的库在需要时进行静态链接,因此 LD_PRELOAD 技巧不可行。
- 同样,内核模块不是一个选项,因为它应该是一个用户态库。
- 最后,出于类似原因,ptrace() 也不是一个选项。我不能让我的库仅仅为了使用而分叉一个新进程。
这可能吗?
【问题讨论】:
-
在我看来,这个问题与系统调用无关,但通常与链接机制有关。由于通常没有人在汇编代码中调用系统调用,您只想在链接时用自己的函数替换一些通用函数。
-
您知道,我想知道
ptrace本身的进程是否有可能实现这一点?即使不是,您也可能想了解strace如何拦截系统调用。
标签: multithreading c++11 future system-calls promise