タグ付けされた質問 「multithreading」

マルチスレッドとは、複数の同時実行ストリーム(一般にスレッドと呼ばれる)を利用して、コンピューターまたはプログラムが作業を同時にまたは非同期に実行する機能です。


13
いくつかのスレッドが完了するのを待つ方法は?
すべてのスレッド化されたプロセスが完了するのを単に待つ方法は何ですか?たとえば、私が持っているとしましょう: public class DoSomethingInAThread implements Runnable{ public static void main(String[] args) { for (int n=0; n<1000; n++) { Thread t = new Thread(new DoSomethingInAThread()); t.start(); } // wait for all threads' run() methods to complete before continuing } public void run() { // do something here } } これを変更して、main()すべてのスレッドのrun()メソッドが終了するまでメソッドがコメントで一時停止するようにするにはどうすればよいですか?ありがとう!



5
SemaphoreとSemaphoreSlimのどちらを選択すればよいですか?
それらのパブリックインターフェイスは似ています。ドキュメントは SemaphoreSlimは、軽量の代替であり、Windowsカーネルのセマフォを使用していないと述べています。 このリソースは、SemaphoreSlimの方がはるかに高速であることを示しています。SemaphoreSlimはどのような状況でセマフォよりも意味がありますか?

4
参照割り当てはアトミックなので、なぜInterlocked.Exchange(ref Object、Object)が必要なのですか?
私のマルチスレッドasmx Webサービスでは、少数で構成され、としてマークされた独自のタイプSystemDataのクラスフィールド_allDataがList<T>ありDictionary<T>ましたvolatile。システムデータ(_allData)はたまに更新され、別のオブジェクトを作成してそれを実行し、newDataそのデータ構造に新しいデータを入力します。完了したら、割り当てます private static volatile SystemData _allData public static bool LoadAllSystemData() { SystemData newData = new SystemData(); /* fill newData with up-to-date data*/ ... _allData = newData. } 割り当てはアトミックであり、古いデータへの参照を持つスレッドはそれを使い続け、残りは割り当て直後に新しいシステムデータを持つため、これは機能するはずです。ただし、私の同僚は、volatileキーワードと単純な割り当てを使用する代わりにInterLocked.Exchange、一部のプラットフォームでは参照割り当てがアトミックであることが保証されていないため、使用する必要があると述べました。さらに、the _allDataフィールドをとして宣言volatileすると Interlocked.Exchange<SystemData>(ref _allData, newData); 「揮発性フィールドへの参照は揮発性として扱われません」という警告が表示されますこれについて何を考えればよいですか?

6
CPUコアに従ってスレッドをスケーリングする方法は?
Javaの複数のスレッドで数学的な問題を解決したいと思います。私の数学の問題は、複数のスレッドで解決したい作業単位に分割できます。 一定量のスレッドを処理するのではなく、CPUコアの量と一致する量のスレッドを使用する必要があります。私の問題は、インターネットで簡単なチュートリアルを見つけることができなかったことです。私が見つけたすべては、固定スレッドの例です。 これはどのように行うことができますか?例を提供できますか?

9
yield()の主な用途は何ですか?join()やinterrupt()とどのように違うのですか?
yield()Java でのメソッドの使用について、特に以下のコード例で少し混乱しています。また、yield()は「スレッドの実行を防止するために使用される」ことも読みました。 私の質問は: 以下のコードは、使用時と使用yield()しない時の両方で同じ出力になると思います。これは正しいです? 実際、主な用途はyield()何ですか? およびメソッドとはどのようにyield()異なりますか?join()interrupt() コード例: public class MyRunnable implements Runnable { public static void main(String[] args) { Thread t = new Thread(new MyRunnable()); t.start(); for(int i=0; i<5; i++) { System.out.println("Inside main"); } } public void run() { for(int i=0; i<5; i++) { System.out.println("Inside run"); Thread.yield(); } } } …

9
スレッド間で例外を伝播するにはどうすればよいですか?
単一のスレッドが呼び出す関数があります(これをメインスレッドと呼びます)。関数の本体内で、CPU集中型の作業を行うために複数のワーカースレッドを生成し、すべてのスレッドが完了するのを待ってから、メインスレッドで結果を返します。 その結果、呼び出し元は関数を単純に使用でき、内部的には複数のコアを使用します。 これまでのところすべて良い 私たちが抱えている問題は、例外を扱うことです。ワーカースレッドで例外を発生させてアプリケーションをクラッシュさせたくありません。メインスレッドでそれらをキャッチできるように、関数の呼び出し元が必要です。ワーカースレッドで例外をキャッチし、それらをメインスレッドに伝達して、そこから巻き戻しを続ける必要があります。 どうすればこれを行うことができますか? 私が考えることができる最高のものは: ワーカースレッドでさまざまな例外をキャッチします(std :: exceptionおよびいくつかの独自の例外)。 例外のタイプとメッセージを記録します。 メインスレッドに、ワーカースレッドに記録されたタイプの例外を再スローする、対応するswitchステートメントを用意します。 これには、例外タイプの制限されたセットのみをサポートするという明らかな欠点があり、新しい例外タイプが追加されるたびに変更が必要になります。


4
Python 3でのマルチプロセッシングvsマルチスレッディングvs asyncio
Python 3.4では、マルチプロセッシング/スレッディング用のいくつかの異なるライブラリがあることを発見しました:マルチプロセッシング vs スレッディング vs asyncio。 しかし、どちらを使用するか、または「推奨されるもの」かわかりません。彼らは同じことをしますか、それとも異なりますか?もしそうなら、どれが何のために使用されますか?コンピューターでマルチコアを使用するプログラムを書きたいのですが。しかし、どのライブラリを学ぶべきかわかりません。

7
JavaScriptでミューテックスは必要ですか?
私はこのリンクを見ました:JavaScriptでの相互排除の実装。一方、JavaScriptにはスレッドがないことを読みましたが、それはどういう意味ですか? イベントが発生したとき、コードのどこで中断できますか? JSにスレッドがない場合、JSでミューテックスを使用する必要がありますか? 具体的には、私はによって呼び出される関数使用した場合の効果について疑問に思ってsetTimeout()やXmlHttpRequestさんをonreadystatechangeグローバルにアクセス変数に。

4
straceを使用して子プロセスを追跡する方法は?
使った strace簡単にプロセスにアタッチしていました。プロセスは90スレッドを作成しました。問題のあるスレッドを見つけたとき、親スレッド、次に祖父母スレッドなど、ルートプロセスに至るまで、うんざりして検索する必要がありました。 どのスレッドが別のスレッドを作成したのかをすばやく把握するためのトリックやツールはありますか?または、より良い方法として、スレッド作成のツリーをpstree?

5
Java Regexスレッドセーフですか?
文字列のリストからパターンを検索するためにPattern#compileおよびを使用する関数がMatcherあります。 この関数は複数のスレッドで使用されます。各スレッドにはPattern#compile、スレッドの作成時にに渡される固有のパターンがあります。スレッドとパターンの数は動的です。つまり、Pattern構成中にとスレッドをさらに追加できます。 synchronize正規表現を使用する場合、この関数にaを付ける必要がありますか?Javaスレッドの正規表現は安全ですか?

8
.NETコンソールアプリを実行し続ける方法は?
別のスレッドでいくつかのサービスを起動するコンソールアプリケーションについて考えてみます。ユーザーがCtrl + Cを押してシャットダウンするのを待つだけです。 次のうちどれがこれを行うためのより良い方法ですか? static ManualResetEvent _quitEvent = new ManualResetEvent(false); static void Main() { Console.CancelKeyPress += (sender, eArgs) => { _quitEvent.Set(); eArgs.Cancel = true; }; // kick off asynchronous stuff _quitEvent.WaitOne(); // cleanup/shutdown and quit } または、これはThread.Sleep(1)を使用します。 static bool _quitFlag = false; static void Main() { Console.CancelKeyPress += delegate { …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.