問題タブ [stdthread]
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++ - c++11 std::thread を使用して segfault を取得する
...
コンパイル済み: clang++ -std=c++11 -stdlib=libc++ newFile.cpp
MultiplyElement で segfault が発生しています...理由は何ですか?
c++ - C++ std::thread 無効な void 式の使用
スレッド化プログラムに問題があります。問題が何であるかはわかっていますが、それを修正する方法がわかりません。マンデルブロー セットを作成し、それを ppm ファイルに書き出すために、任意の数のスレッドを設定しています。私は std::thread のベクトルを使用しており、マンデルブロ クラス メンバー関数を呼び出してスレッド化を行っています。ここで問題が発生します。コンパイラが気に入らない void(void) 関数を呼び出しています。スレッドが void(void) 関数を実行するようにこれを修正するにはどうすればよいですか? 私のコードは以下の通りです:
main.cpp
mandelbrot.cpp
c++ - std::thread によりアプリケーションがエラー R6010 で中止される
メンバー std::thread を内部的に保持する Task という名前のクラスがあります。一般的な考え方は、処理の要求が来ても生き続けるスレッドを作成することです。
関数 start() では、次のことを行います。
問題は、この行がランタイム エラー R6010 で abort() を呼び出すことです。これは、以前の結合なしで呼び出された m_thread のデストラクタが原因である可能性があることをどこかで読みましたが、スレッドがまだ開始されていないため、結合できません。
これをVisual Studio 2012で実行しています
アップデート:
そのため、テスト例を試してみましたが、エラーを再現できませんでした。次に、問題のある関数の開始関数を次のように置き換えました。
しかし、それでもエラー R6010 が表示されます。コール スタックは次のとおりです。
UPDATE2: 最後に問題を再現できました。コードは次のとおりです。メイン関数で foo() を呼び出します。
クラッシュする場合とそうでない場合があるため、ここのどこかに競合状態があると思います。1 つのスレッドは ~Task() のクリティカル領域内にあり、もう 1 つのスレッドは Update1 のスタックとして存在します。
c++ - shared_ptr のインスタンスの作成make_shared で
次のコードを検討してください。
関数Stepを呼び出すように、共有ポインターmThreadを初期化しようとしています。ただし、コンパイラは「型の参照の初期化が無効です...型「未解決のオーバーロードされた関数型」の式から」というエラーを出します。明らかに私は何かばかげたことをしていますが、指を置くことはできません。誰でも助けることができますか?前もって感謝します!
c++ - 関数のリストへの Lisp スタイルのマッピングの C++ での並列実装は、スレッドの使用後に cout なしで失敗します
このコードは、以下のいずれかの行/* debug messages */
がコメント解除されている場合にのみ機能します。または、マップ先のリストが 30 要素未満の場合。
func_map
Lisp スタイルのマッピングの線形実装であり、動作すると想定できます。
使い方は以下のようになりますfunc_map(FUNC_PTR foo, std::vector* list, locs* start_and_end)
FUNC_PTR
ポインタを返しvoid
、受け取る関数へのint
ポインタです。
例: &foo
infoo
は次のように定義されます。
locs
は 2 つのメンバーint_start
とint_end
;を持つ構造体です。これを使用して、func_map
反復する必要がある要素を伝えます。
vector_locs[i]
問題は、スレッドの使用方法とスレッドの解決方法にあると思います。ただし、スレッドによって参照されるインスタンスの状態を維持するためにベクトルを使用すると、locs
それが問題になるのを防ぐことができます。私は本当に困惑しています。
c++ - いつ std::thread::detach を使用する必要がありますか?
std::thread
アプリケーションを高速化するために使用する必要がある場合があります。join()
また、スレッドが完了するまで待機することも知っています。これは簡単に理解できますが、呼び出す場合と呼び出さない場合の違いは何detach()
ですか?
detach()
がなければ、スレッドのメソッドはスレッドを使用して独立して機能すると思いました。
切り離さない:
デタッチによる呼び出し:
c++ - 非子スレッドに参加する
通常、スレッドの親から join() を呼び出して、スレッドが終了するのを待ちます。
スレッドが子ではない別のスレッドで join() を呼び出すことは許可されていますか? もしそうなら、これを使用する必要がありますか?