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

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

4
WPFバックグラウンドワーカーの使用方法
私のアプリケーションでは、一連の初期化手順を実行する必要があります。これらの手順が完了するまでに7〜8秒かかり、その間にUIが応答しなくなります。これを解決するには、別のスレッドで初期化を実行します。 public void Initialization() { Thread initThread = new Thread(new ThreadStart(InitializationThread)); initThread.Start(); } public void InitializationThread() { outputMessage("Initializing..."); //DO INITIALIZATION outputMessage("Initialization Complete"); } 私はいくつかの記事を読みましたが、BackgroundWorker長いタスクを実行するためにスレッドを作成しなくてもアプリケーションの応答性を維持できるようにする方法を読みましたが、実装しようとして成功したことはありません。これを使用してBackgroundWorker?

6
Pythonでのスレッドの作成
スクリプトがあり、1つの関数を他の関数と同時に実行したい。 私が見たサンプルコード: import threading def MyThread (threading.thread): # doing something........ def MyThread2 (threading.thread): # doing something........ MyThread().start() MyThread2().start() これを機能させるのに苦労しています。クラスではなくスレッド化された関数を使用してこれを実行したいと思います。 これは作業スクリプトです: from threading import Thread class myClass(): def help(self): os.system('./ssh.py') def nope(self): a = [1,2,3,4,5,6,67,78] for i in a: print i sleep(1) if __name__ == "__main__": Yep = myClass() thread = …

10
アプリケーション全体に文化を設定する方法はありますか?すべての現在のスレッドと新しいスレッド?
アプリケーション全体に文化を設定する方法はありますか?すべての現在のスレッドと新しいスレッド? データベースに保存されているカルチャの名前があり、アプリケーションが起動すると、 CultureInfo ci = new CultureInfo(theCultureString); Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; しかし、もちろん、これは新しいスレッドで何かを実行したいときに「失われます」。それCurrentCultureをCurrentUICultureアプリケーション全体に設定する方法はありますか?それで、その新しいスレッドもその文化を獲得しますか?それとも、フックできる新しいスレッドが作成されるたびに発生するイベントですか?


8
ミューテックスの例/チュートリアル?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 4ヶ月前に閉鎖。 この質問を改善する 私はマルチスレッドに不慣れで、ミューテックスの仕組みを理解しようとしていました。多くのグーグル操作を行いましたが、ロックが機能しない独自のプログラムを作成したため、どのように機能するかについて疑問が残りました。 mutexの絶対に直感的でない構文の1つはですpthread_mutex_lock( &mutex1 );。ここでは、mutexがロックされているように見えますが、私が本当にロックしたいのは他の変数です。この構文は、ミューテックスをロックすると、ミューテックスがロック解除されるまでコードの領域をロックすることを意味しますか?次に、スレッドは領域がロックされていることをどのようにして知るのでしょうか。[ 更新:スレッドは、 メモリフェンシングによって領域がロックされていることを認識しています ]。そして、そのような現象はクリティカルセクションと呼ばれるべきではないでしょうか?[ 更新:重要なセクションオブジェクトはWindowsでのみ使用できます。オブジェクトはミューテックスよりも高速で、それを実装するスレッドにのみ表示されます。それ以外の場合、クリティカルセクションは、ミューテックスによって保護されているコードの領域を指します ] 簡単に言うと、最も簡単なミューテックスのサンプルプログラムと、それがどのように機能するかについてのロジックに関する可能な限り簡単な説明を手伝っていただけませんか?これは他の多くの初心者を助けると確信しています。

8
errnoはスレッドセーフですか?
ではerrno.h、この変数が宣言されているextern int errno;ので、私の質問は、errnoいくつかの呼び出しの後に値をチェックするか、マルチスレッドコードでperror()を使用しても安全ですか?これはスレッドセーフ変数ですか?そうでない場合、代替案は何ですか? 私はLinuxをx86アーキテクチャのgccで使用しています。
175 c  linux  multithreading  gcc 

7
多くのUIコンポーネントがこれを必要とするため、呼び出しスレッドはSTAである必要があります
私はhttp://www.codeproject.com/KB/IP/Facebook_API.aspxを使用しています WPFを使用して作成されたXAMLを呼び出そうとしています。しかし、それは私にエラーを与えます: 多くのUIコンポーネントがSTAを必要とするため、呼び出しスレッドはSTAでなければなりません。 どうすればいいかわかりません。私はこれをやろうとしています: FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList(); しかし、それは私にそのエラーを与えています。 バックグラウンドワーカーを追加しました。 static BackgroundWorker bw = new BackgroundWorker(); static void Main(string[] args) { bw.DoWork += bw_DoWork; bw.RunWorkerAsync("Message to worker"); Console.ReadLine(); } static void bw_DoWork(object sender, DoWorkEventArgs e) { // This is called on the worker thread FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList(); …


3
std :: atomicとは正確には何ですか?
私はそれstd::atomic<>がアトミックオブジェクトであることを理解しています。しかし、どの程度アトミックですか?私の理解では、操作はアトミックである可能性があります。オブジェクトをアトミックにすることは正確にはどういう意味ですか?たとえば、次のコードを同時に実行する2つのスレッドがあるとします。 a = a + 12; 次に、操作全体(たとえばadd_twelve_to(int))はアトミックですか?または、変数atomic(so operator=())に変更が加えられていますか?

7
技術的には、なぜErlangのプロセスはOSスレッドよりも効率的ですか?
アーランの特徴 以下からのErlangプログラミング(2009): Erlangの並行性は高速でスケーラブルです。そのプロセスは軽量であり、Erlang仮想マシンは、作成されたすべてのプロセスに対してOSスレッドを作成しません。これらは、基盤となるオペレーティングシステムに関係なく、VMで作成、スケジュール、および処理されます。その結果、プロセスの作成時間はマイクロ秒のオーダーであり、同時に存在するプロセスの数とは無関係です。これをJavaおよびC#と比較してください。すべてのプロセスについて、基盤となるOSスレッドが作成されます。Erlangが両方の言語よりもはるかに優れているため、いくつかの非常に競争力のある比較が得られます。 同時実行アーラン(PDFファイル)に指向プログラミング (スライド)(2003年): Erlangプロセスの作成にかかる時間は1µsから2,500プロセスまで一定であることがわかります。その後、最大30,000プロセスで約3µsに増加します。JavaとC#のパフォーマンスは、図の上部に示されています。少数のプロセスでは、プロセスの作成に約300µsかかります。2,000を超えるプロセスを作成することは不可能です。 最大30,000プロセスの場合、2つのErlangプロセス間でメッセージを送信する時間は約0.8µsであることがわかります。C#の場合、メッセージごとに約50µs、最大プロセス数(約1800プロセス)までかかります。Javaはさらに悪く、最大100のプロセスでメッセージあたり約50µsかかった後、約1000のJavaプロセスがあるとメッセージあたり10msに急速に増加しました。 私の考え Erlangプロセスが新しいプロセスの生成においてはるかに効率的であり、プロセスごとのメモリフットプリントがはるかに小さい理由を技術的に完全には理解していません。OSとErlang VMの両方は、スケジューリング、コンテキストスイッチを実行し、レジスタの値を追跡する必要があります。 単に、OSスレッドがErlangのプロセスと同じ方法で実装されていないのはなぜですか?彼らはもっと何かをサポートする必要がありますか?そして、なぜ彼らはより大きなメモリフットプリントを必要とするのですか?そしてなぜ彼らは産卵とコミュニケーションが遅いのですか? 技術的に、スポーンと通信に関して、ErlangのプロセスがOSスレッドよりも効率的であるのはなぜですか?また、OSのスレッドを同じ効率的な方法で実装および管理できないのはなぜですか。また、OSスレッドのメモリフットプリントが大きく、生成と通信が遅いのはなぜですか? もっと読む SMPに焦点を当てたErlang VMの内部(2008) JavaとErlangでの並行性(pdf)(2004) JavaのスレッドとErlangのプロセスのパフォーマンス測定(1998)

2
Redisはシングルスレッドですが、同時I / Oはどのように行われますか?
Redisの基本を理解しようとして、興味深いブログ投稿を見つけました。 著者は述べています: Redisはepoll / kqueueを使用してシングルスレッド化されており、I / O同時実行性の観点から無期限に拡張されます。 この文は不可解だと思うので、私は確かにスレッド全体を誤解しています。プログラムがシングルスレッドである場合、それはどのように同時に何かをしますか?とにかくサーバーがシングルスレッドの場合、Redisの操作がアトミックになるほど優れているのはなぜですか? 誰かが問題についていくつかの光を当てることができますか?

11
BackgroundWorkerとバックグラウンドスレッド
Windowsフォームアプリで使用するバックグラウンドスレッドの実装の選択について、文体上の質問があります。現在、私はBackgroundWorker無限(while(true))ループを持つフォームを持っています。このループではWaitHandle.WaitAny、関心のあることが発生するまでスレッドをスヌーズし続けるために使用します。待機しているイベントハンドルの1つは「StopThread」イベントです。これにより、ループを抜けることができます。このイベントは、オーバーライドされたときに通知されForm.Dispose()ます。 BackgroundWorkerファイルをダウンロードしたり、一連のアイテムを処理したりするなど、UIと結び付けたくなくて限りのない操作を意図した場所で読んだことがあります。この場合、「終了」は不明であり、ウィンドウが閉じている場合のみです。したがってBackgroundWorker、この目的ではなくバックグラウンドスレッドを使用する方が適切でしょうか?

9
マルチスレッドのCまたはC ++プログラミングでvolatileが役に立たないと見なされるのはなぜですか?
私が最近投稿したこの回答で示されているように、私はvolatileマルチスレッドプログラミングコンテキストでのユーティリティ(またはその欠如)について混乱しているようです。 私の理解はこれです。変数にアクセスするコードの制御の流れの外で変数が変更される可能性がある場合は常に、その変数をとして宣言する必要がありますvolatile。シグナルハンドラー、I / Oレジスター、および別のスレッドによって変更された変数はすべて、このような状況を構成します。 したがって、グローバルintがありfoo、foo1つのスレッドによって読み取られ、別のスレッドによって(おそらく適切なマシン命令を使用して)アトミックに設定されている場合、読み取りスレッドは、シグナルハンドラーによって微調整された変数を見るのと同じようにこの状況を認識します。外部ハードウェア条件によって変更されるため、foo宣言する必要がありますvolatile(または、マルチスレッドの状況では、メモリフェンスの負荷でアクセスします。これはおそらくより良い解決策です)。 どのように、どこで私は間違っていますか?

17
スレッドから例外をキャッチする方法
私はJavaメインクラスを持っています。クラスでは、新しいスレッドを開始します。メインでは、スレッドが終了するまで待機します。ある時点で、スレッドからランタイム例外をスローしましたが、メインクラスのスレッドからスローされた例外をキャッチできません。 これがコードです: public class Test extends Thread { public static void main(String[] args) throws InterruptedException { Test t = new Test(); try { t.start(); t.join(); } catch(RuntimeException e) { System.out.println("** RuntimeException from main"); } System.out.println("Main stoped"); } @Override public void run() { try { while(true) { System.out.println("** Started"); sleep(2000); throw …


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