0

我正在考虑开发自己的工作窃取调度程序,需要解决的问题之一是堆栈溢出的可能性。这些仅发生在少数情况下,即一名工人不断从其他工人那里窃取任务,例如:

steal();
work();
steal();
work();
steal();
...

可以使用多种技术来避免这种模式,但是简单地增加堆栈空间可能是最好的选择,因为它允许进行其他优化。在单线程应用程序上,这可以通过调用来完成,setrlimit()但对于多个线程,它没有效果(除非从主线程调用)。

此行为可能与跨多个线程具有固定大小的堆栈有关。但是,对于拆分堆栈(在 GCC 4.6.0+ 上实现),此限制不再适用。

我的问题是调用是否仅适用于拆分堆栈,或者setrlimit()在否定情况下是否可以调用底层brk()//并手动执行。mmap()sbrk()

4

1 回答 1

0

以一种骇人听闻的方式,我想我可以pthread_attr_setstacksize()/pthread_create()/pthread_join()用来创建一个新线程并完成其中的所有工作,但是这是线程创建/调度的不必要开销。

于 2012-11-27T14:56:13.353 回答