我正在考虑开发自己的工作窃取调度程序,需要解决的问题之一是堆栈溢出的可能性。这些仅发生在少数情况下,即一名工人不断从其他工人那里窃取任务,例如:
steal();
work();
steal();
work();
steal();
...
可以使用多种技术来避免这种模式,但是简单地增加堆栈空间可能是最好的选择,因为它允许进行其他优化。在单线程应用程序上,这可以通过调用来完成,setrlimit()
但对于多个线程,它没有效果(除非从主线程调用)。
此行为可能与跨多个线程具有固定大小的堆栈有关。但是,对于拆分堆栈(在 GCC 4.6.0+ 上实现),此限制不再适用。
我的问题是调用是否仅适用于拆分堆栈,或者setrlimit()
在否定情况下是否可以调用底层brk()
//并手动执行。mmap()
sbrk()