問題タブ [boost-coroutine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
827 参照

c++ - ブーストコルーチンはWindowsx86_64では機能しませんか?

32ビットと64ビットの両方のプログラムにparallel.cpp付属している例をコンパイルしました。boost::coroutines::coroutine

それらは両方ともエラーなしでコンパイルおよびリンクします。32ビットプログラムは期待どおりに実行および動作しますが、64ビットアプリは起動時にクラッシュします。

Windows764ビットでのVisualStudio2012Expressの使用。

編集:コルーチンはブーストに受け入れられましたが、ブースト配布の一部としてまだリリースされていません。著者の「最終」バージョンの例を使用しました。

編集:これはコードです

0 投票する
1 に答える
703 参照

c++ - コルーチンアサーションの失敗を後押しする

Boostで新しいコルーチン機能を試すために、次のプログラムを作成しました。

このコードは、ドキュメントのサンプルコードに基づいています。

私のビルドコマンドは次のようになります。

出力:

アサーションが失敗したため、プログラムは中止されます。コード内のエラーを見つけるのを手伝ってもらえますか?

0 投票する
1 に答える
629 参照

c++ - Boost::コルーチンの例が機能しない

Boost ライブラリには興味深いものがあります - コルーチンです。簡単な階乗の例を試してみましたが、エラーです:

factorial.cpp(35): エラー C2039: 'self' : 'boost::coroutines::coroutine' のメンバーではありません

この例と他の例をどのようにコンパイルしますか? Boostのインストールが悪いのでしょうか?boost_1_55_0\boost サブディレクトリのみをコピーします

0 投票する
1 に答える
372 参照

c++ - Boost Coroutine(1.55) を使用した場合のセグメンテーション エラーが不明ですか?

を取得するコードを書きますSegmentation fault。Boost Coroutine のバグなのか、以下のコードのバグなのかはわかりません。

test.txt非常に大きいため、segfault が発生する前に eof を取得することはありません。私は 1.55 の Boost を使用していますが、いくつかの観察結果があります。

  1. でセグエラーが発生しましたline I
  2. f.close()yield 句の前に削除または移動すると、seg-error が消えました。
  3. line Jコード内で削除すると、seg-error が消えました。
  4. (たとえば 512)の代わりに小さい数値を使用する8192と、seg-error は消えました。

ここで何が問題なのですか?

0 投票する
2 に答える
183 参照

c++ - Boehm GC で Boost.Coroutine を使用するには?

Boost.Coroutine は独自のコール スタックを割り当てます。Boehm GC はこれらのスタック上のポインターをルートと見なしますか? コルーチンへのコンテキスト スイッチの後、Boehm はプログラムを終了します。

0 投票する
2 に答える
27612 参照

c++ - スタックレス コルーチンはスタックフル コルーチンとどう違うのですか?

バックグラウンド:

私は現在、多くの (数百から数千の) スレッドを持つアプリケーションを持っているため、これを求めています。これらのスレッドのほとんどは、作業項目がキューに入れられるのを待って、ほとんどの時間アイドル状態です。作業項目が利用可能になると、任意の複雑な既存のコードを呼び出して処理されます。オペレーティング システムの構成によっては、ユーザー プロセスの最大数を制御するカーネル パラメーターにアプリケーションがぶつかる可能性があるため、ワーカー スレッドの数を減らす方法を試してみたいと思います。

私の提案した解決策:

各ワーカースレッドをコルーチンに置き換えるコルーチンベースのアプローチがこれを達成するのに役立つようです。次に、実際の (カーネル) ワーカー スレッドのプールによってバックアップされるワーク キューを作成できます。アイテムが処理のために特定のコルーチンのキューに配置されると、エントリがスレッド プールのキューに配置されます。次に、対応するコルーチンを再開し、キューに入れられたデータを処理してから、再び一時停止し、ワーカー スレッドを解放して他の作業を実行します。

実装の詳細:

これをどのように行うかを考えていると、スタックレス コルーチンとスタックフル コルーチンの機能の違いを理解するのに苦労しています。Boost.Coroutineライブラリを使用してスタックフル コルーチンを使用した経験があります。概念レベルから理解するのは比較的簡単です。コルーチンごとに、CPU コンテキストとスタックのコピーを維持し、コルーチンに切り替えると、その保存されたコンテキストに切り替えます (カーネルモード スケジューラが行うように)。 )。

あまり明確でないのは、スタックレス コルーチンがこれとどのように異なるかです。私のアプリケーションでは、上記の作業項目のキューイングに関連するオーバーヘッドの量が非常に重要です。新しい CO2 ライブラリなど、私が見たほとんどの実装は、スタックレス コルーチンがオーバーヘッドの少ないコンテキスト スイッチを提供することを示唆しています。

したがって、スタックレス コルーチンとスタックフル コルーチンの機能の違いをより明確に理解したいと思います。具体的には、次の質問について考えます。

  • このような参考文献は、スタックフル コルーチンとスタックレス コルーチンのどこで譲歩/再開できるかに違いがあることを示唆しています。これは事実ですか?スタックフル コルーチンでは実行できるが、スタックレス コルーチンでは実行できない簡単な例はありますか?

  • 自動ストレージ変数 (つまり、「スタック上の」変数) の使用に制限はありますか?

  • スタックレス コルーチンから呼び出すことができる関数に制限はありますか?

  • スタックレス コルーチンのスタック コンテキストの保存がない場合、コルーチンの実行時に自動ストレージ変数はどこに移動しますか?

0 投票する
1 に答える
783 参照

c++ - ブースト::コルーチンでクラスメンバー関数を適切に使用するには?

私は現在、と働いていboost::asymmetric_coroutineます。グローバル名前空間に通常の関数があるとしましょう:

その場合、次の方法でこの関数を使用してコルーチンを作成および実行できます。

私がする必要があるのは、同じ方法でクラス メンバー関数を使用することです。私が理解しているように、boost::bind何らかの方法で使用する必要がありますが、次のコードは機能しません。

発生するエラーは

「get_pointer(const boost::coroutines::push_coroutine&)」を呼び出す一致する関数がありません

どうすれば適切に行うことができますか?