問題タブ [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.
c++ - ブーストコルーチンはWindowsx86_64では機能しませんか?
32ビットと64ビットの両方のプログラムにparallel.cpp
付属している例をコンパイルしました。boost::coroutines::coroutine
それらは両方ともエラーなしでコンパイルおよびリンクします。32ビットプログラムは期待どおりに実行および動作しますが、64ビットアプリは起動時にクラッシュします。
Windows764ビットでのVisualStudio2012Expressの使用。
編集:コルーチンはブーストに受け入れられましたが、ブースト配布の一部としてまだリリースされていません。著者の「最終」バージョンの例を使用しました。
編集:これはコードです
c++ - コルーチンアサーションの失敗を後押しする
Boostで新しいコルーチン機能を試すために、次のプログラムを作成しました。
このコードは、ドキュメントのサンプルコードに基づいています。
私のビルドコマンドは次のようになります。
出力:
アサーションが失敗したため、プログラムは中止されます。コード内のエラーを見つけるのを手伝ってもらえますか?
c++ - Boost::コルーチンの例が機能しない
Boost ライブラリには興味深いものがあります - コルーチンです。簡単な階乗の例を試してみましたが、エラーです:
factorial.cpp(35): エラー C2039: 'self' : 'boost::coroutines::coroutine' のメンバーではありません
この例と他の例をどのようにコンパイルしますか? Boostのインストールが悪いのでしょうか?boost_1_55_0\boost サブディレクトリのみをコピーします
c++ - Boost Coroutine(1.55) を使用した場合のセグメンテーション エラーが不明ですか?
を取得するコードを書きますSegmentation fault
。Boost Coroutine のバグなのか、以下のコードのバグなのかはわかりません。
test.txt
非常に大きいため、segfault が発生する前に eof を取得することはありません。私は 1.55 の Boost を使用していますが、いくつかの観察結果があります。
- でセグエラーが発生しました
line I
f.close()
yield 句の前に削除または移動すると、seg-error が消えました。line J
コード内で削除すると、seg-error が消えました。- (たとえば 512)の代わりに小さい数値を使用する
8192
と、seg-error は消えました。
ここで何が問題なのですか?
c++ - Boehm GC で Boost.Coroutine を使用するには?
Boost.Coroutine は独自のコール スタックを割り当てます。Boehm GC はこれらのスタック上のポインターをルートと見なしますか? コルーチンへのコンテキスト スイッチの後、Boehm はプログラムを終了します。
c++ - スタックレス コルーチンはスタックフル コルーチンとどう違うのですか?
バックグラウンド:
私は現在、多くの (数百から数千の) スレッドを持つアプリケーションを持っているため、これを求めています。これらのスレッドのほとんどは、作業項目がキューに入れられるのを待って、ほとんどの時間アイドル状態です。作業項目が利用可能になると、任意の複雑な既存のコードを呼び出して処理されます。オペレーティング システムの構成によっては、ユーザー プロセスの最大数を制御するカーネル パラメーターにアプリケーションがぶつかる可能性があるため、ワーカー スレッドの数を減らす方法を試してみたいと思います。
私の提案した解決策:
各ワーカースレッドをコルーチンに置き換えるコルーチンベースのアプローチがこれを達成するのに役立つようです。次に、実際の (カーネル) ワーカー スレッドのプールによってバックアップされるワーク キューを作成できます。アイテムが処理のために特定のコルーチンのキューに配置されると、エントリがスレッド プールのキューに配置されます。次に、対応するコルーチンを再開し、キューに入れられたデータを処理してから、再び一時停止し、ワーカー スレッドを解放して他の作業を実行します。
実装の詳細:
これをどのように行うかを考えていると、スタックレス コルーチンとスタックフル コルーチンの機能の違いを理解するのに苦労しています。Boost.Coroutineライブラリを使用してスタックフル コルーチンを使用した経験があります。概念レベルから理解するのは比較的簡単です。コルーチンごとに、CPU コンテキストとスタックのコピーを維持し、コルーチンに切り替えると、その保存されたコンテキストに切り替えます (カーネルモード スケジューラが行うように)。 )。
あまり明確でないのは、スタックレス コルーチンがこれとどのように異なるかです。私のアプリケーションでは、上記の作業項目のキューイングに関連するオーバーヘッドの量が非常に重要です。新しい CO2 ライブラリなど、私が見たほとんどの実装は、スタックレス コルーチンがオーバーヘッドの少ないコンテキスト スイッチを提供することを示唆しています。
したがって、スタックレス コルーチンとスタックフル コルーチンの機能の違いをより明確に理解したいと思います。具体的には、次の質問について考えます。
このような参考文献は、スタックフル コルーチンとスタックレス コルーチンのどこで譲歩/再開できるかに違いがあることを示唆しています。これは事実ですか?スタックフル コルーチンでは実行できるが、スタックレス コルーチンでは実行できない簡単な例はありますか?
自動ストレージ変数 (つまり、「スタック上の」変数) の使用に制限はありますか?
スタックレス コルーチンから呼び出すことができる関数に制限はありますか?
スタックレス コルーチンのスタック コンテキストの保存がない場合、コルーチンの実行時に自動ストレージ変数はどこに移動しますか?
c++ - ブースト::コルーチンでクラスメンバー関数を適切に使用するには?
私は現在、と働いていboost::asymmetric_coroutine
ます。グローバル名前空間に通常の関数があるとしましょう:
その場合、次の方法でこの関数を使用してコルーチンを作成および実行できます。
私がする必要があるのは、同じ方法でクラス メンバー関数を使用することです。私が理解しているように、boost::bind
何らかの方法で使用する必要がありますが、次のコードは機能しません。
発生するエラーは
「get_pointer(const boost::coroutines::push_coroutine&)」を呼び出す一致する関数がありません
どうすれば適切に行うことができますか?