0

私は自分の仕事を盗むスケジューラーを開発することを考えています、そして解決されなければならない問題の1つはスタックオーバーフローの可能性です。これらは、1人の作業者が他の作業者から継続的にタスクを盗むというまれなケースでのみ発生します。

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 に答える