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

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

7
スレッドはPythonでどのように機能しますか?また、Pythonスレッド特有の一般的な落とし穴は何ですか?
私はPythonでスレッドがどのように機能するかについて頭を悩ませてきましたが、スレッドがどのように機能するかについての適切な情報を見つけるのは困難です。リンクか何かが足りないかもしれませんが、公式のドキュメントはこのテーマについてあまり徹底していないようで、良い記事を見つけることができませんでした。 私の知る限り、一度に実行できるスレッドは1つだけで、アクティブなスレッドは10命令ごとに切り替わりますか? 良い説明はどこにありますか、それとも提供できますか?また、Pythonでスレッドを使用しているときに発生する一般的な問題を知っておくと非常に便利です。

4
新しいスレッドのWebBrowserコントロール
「クリック」したいURIのリストがありますこれを実現するために、URIごとに新しいWebブラウザコントロールを作成しようとしています。URIごとに新しいスレッドを作成します。問題は、ドキュメントの前のスレッドの終わりです。が完全にロードされているため、DocumentCompleteイベントを利用できません。これを克服するにはどうすればよいですか。 var item = new ParameterizedThreadStart(ClicIt.Click); var thread = new Thread(item) {Name = "ClickThread"}; thread.Start(uriItem); public static void Click(object o) { var url = ((UriItem)o); Console.WriteLine(@"Clicking: " + url.Link); var clicker = new WebBrowser { ScriptErrorsSuppressed = true }; clicker.DocumentCompleted += BrowseComplete; if (String.IsNullOrEmpty(url.Link)) return; if (url.Link.Equals("about:blank")) return; if (!url.Link.StartsWith("http://") …

11
c ++ 11で整数スレッドIDを取得する方法
c ++ 11には現在のスレッドIDを取得する可能性がありますが、整数型にキャストすることはできません。 cout<<std::this_thread::get_id()<<endl; 出力:139918771783456 cout<<(uint64_t)std::this_thread::get_id()<<endl; エラー:タイプ 'std :: thread :: id'からタイプ 'uint64_t'への無効なキャスト他のタイプと同じ:タイプ 'std :: thread :: id'からタイプ 'uint32_t'への無効なキャスト 整数のスレッドIDを取得するためにポインターキャストを実行したくありません。それを行うための合理的な方法(ポータブルにしたいので標準)はありますか?

5
並行辞書正しい使用法
私はこれが並行辞書の正しい使用法であると考えるのは正しいですか private ConcurrentDictionary<int,long> myDic = new ConcurrentDictionary<int,long>(); //Main thread at program startup for(int i = 0; i < 4; i++) { myDic.Add(i, 0); } //Seperate threads use this to update a value myDic[InputID] = newLongValue; ロックなどがなく、複数のスレッドが同じことを行おうとしている場合でも、辞書の値を更新しているだけです。

6
std :: threadがまだ実行されているかどうかを確認する方法は?
std::threadがまだ実行されているかどうかを(プラットフォームに依存しない方法で)確認するにはどうすればよいですか?それはtimed_join()方法を欠いており、そのためのものでjoinable()はありません。 std::lock_guardスレッド内のaでミューテックスをロックし、ミューテックスのtry_lock()メソッドを使用して、それがまだロックされている(スレッドが実行されている)かどうかを判断することを考えましたが、不必要に複雑に思えます。 もっとエレガントな方法を知っていますか? 更新:明確にするために:スレッドが正常に終了したかどうかを確認したいと思います。「ぶら下がっている」スレッドは、この目的で実行されていると見なされます。


5
スレッドでグローバル変数を使用する
グローバル変数をスレッドと共有するにはどうすればよいですか? 私のPythonコード例は次のとおりです。 from threading import Thread import time a = 0 #global variable def thread1(threadname): #read variable "a" modify by thread 2 def thread2(threadname): while 1: a += 1 time.sleep(1) thread1 = Thread( target=thread1, args=("Thread-1", ) ) thread2 = Thread( target=thread2, args=("Thread-2", ) ) thread1.join() thread2.join() 2つのスレッドで1つの変数を共有する方法がわかりません。

4
jdk1.6以降のHashMapsがmulti = threadingで問題を引き起こすことを考えると、コードを修正するにはどうすればよいですか?
私は最近stackoverflowで質問をし、その答えを見つけました。最初の質問は、ミューテックスまたはガベージコレクション以外のどのメカニズムがマルチスレッドJavaプログラムを遅くする可能性があるかということでした。 恐ろしいことに、HashMapがJDK1.6とJDK1.7の間で変更されていることに気づきました。これで、HashMapを作成するすべてのスレッドを同期させるコードのブロックができました。 JDK1.7.0_10のコード行は次のとおりです。 /**A randomizing value associated with this instance that is applied to hash code of keys to make hash collisions harder to find. */ transient final int hashSeed = sun.misc.Hashing.randomHashSeed(this); どちらが呼び出すことになります protected int next(int bits) { long oldseed, nextseed; AtomicLong seed = this.seed; do { oldseed = seed.get(); …

4
ワーカースレッドを介してObservableCollectionを更新するにはどうすればよいですか?
私が持っているObservableCollection<A> a_collection;コレクションは「n」の項目が含まれています。各アイテムAは次のようになります。 public class A : INotifyPropertyChanged { public ObservableCollection<B> b_subcollection; Thread m_worker; } 基本的に、これはすべてWPFリストビュー+詳細ビューコントロールに接続されておりb_subcollection、選択したアイテムのを別のリストビューに表示します(双方向バインディング、propertychangedの更新など)。 スレッドの実装を開始したときに、問題が発生しました。全体的なアイデアは、a_collectionワーカースレッドを使用して「作業を行う」ことで、それぞれb_subcollectionsを更新し、GUIに結果をリアルタイムで表示させることでした。 試してみると、DispatcherスレッドだけがObservableCollectionを変更できるという例外が発生し、作業が停止しました。 誰かが問題を説明できますか、そしてそれを回避する方法はありますか?


5
メインスレッドでメソッドを呼び出しますか?
まず、iPhone用のコードを書いています。を使用せずにメインスレッドでメソッドを呼び出せるようにする必要がありますperformSelectorOnMainThread。使用したくない理由performSelectorOnMainThreadは、ユニットテスト用のモックを作成しようとすると問題が発生するためです。 [self performSelectorOnMainThread:@Selector(doSomething) withObject:nil]; 問題は、私のモックは電話をかける方法を知っているが、電話doSomethingをかける方法を知らないということperformSelectorOnMainThreadです。 だから何か解決策はありますか?

3
std :: futureのステータスを取得します
std::futureが終了したかどうかを確認することはできますか?私が知る限り、それを行う唯一の方法wait_forは、ゼロの期間で電話をかけ、ステータスがそうであるかどうかを確認することreadyですが、より良い方法はありますか?

3
複数のプロセスからの単一ファイルの処理
各行を処理して(いくつかの操作を実行して)データベースに保存したい単一の大きなテキストファイルがあります。単一の単純なプログラムには時間がかかりすぎるので、複数のプロセスまたはスレッドを介して実行する必要があります。各スレッド/プロセスは、その単一のファイルから異なるデータ(異なる行)を読み取り、それらのデータ(行)に対していくつかの操作を実行してデータベースに配置する必要があります。これにより、最終的にすべてのデータが処理され、データベースは必要なデータとともにダンプされます。 しかし、私はこれにどのようにアプローチするかを理解することができません。

10
ウィンドウハンドルが作成されるまで、コントロールでInvokeまたはBeginInvokeを呼び出すことはできません。
Greg Dがここで説明しているものと同様のSafeInvokeControl拡張メソッドがあります(IsHandleCreatedチェックを除く)。 私はそれSystem.Windows.Forms.Formを次のように呼んでいます: public void Show(string text) { label.SafeInvoke(()=>label.Text = text); this.Show(); this.Refresh(); } 場合によっては(この呼び出しはさまざまなスレッドから発生する可能性があります)、次のエラーが発生します。 System.InvalidOperationException 発生した Message= "ウィンドウハンドルが作成されるまで、コントロールでInvokeまたはBeginInvokeを呼び出すことはできません。" Source= "System.Windows.Forms" StackTrace: at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) at System.Windows.Forms.Control.Invoke(Delegate method) at DriverInterface2.UI.WinForms.Dialogs.FormExtensions.SafeInvoke[T](T control, Action`1 action) in C:\code\DriverInterface2\DriverInterface2.UI.WinForms\Dialogs\FormExtensions.cs:line 16 何が起こっているのですか、どうすれば修正できますか?フォーム作成の問題ではないことはわかっています。一度は機能し、次回は失敗することがあるので、問題は何でしょうか。 PS。私は本当にWinFormsでひどいです、誰かがモデル全体とそれを扱う方法を説明する良いシリーズの記事を知っていますか?


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