簡體   English   中英

在具有拆分堆棧的多線程應用程序上,使用setrlimit()增加堆棧空間

[英]Increasing stack space with setrlimit() on a multi-threaded application with split stacks

我正在考慮開發自己的工作竊取調度程序,並且需要解決的問題之一是堆棧溢出的可能性。 這些僅在不經常發生的情況下發生,其中一個工人不斷從其他工人那里竊取任務,例如:

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

可以使用多種技術來避免這種模式,但是簡單地增加堆棧空間可能是最好的選擇,因為它可以進行其他優化。 在單線程應用程序上,這可以通過調用setrlimit()來完成,但對於多個線程則無效(除非從主線程調用)。

此行為可能與跨多個線程具有固定大小的堆棧有關。 但是,對於拆分堆棧(在GCC 4.6.0+上實現),此限制不再成立。

我的問題是對setrlimit()的調用是否僅適用於拆分堆棧,或者是否可以調用基礎的brk() / mmap() / sbrk()並手動執行,否定情況。

以一種怪誕的方式,我想我可以使用pthread_attr_setstacksize()/pthread_create()/pthread_join()創建一個新線程並完成其中的所有工作,但這是線程創建/調度的不必要開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM