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

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

10
C ++ 0xにはセマフォがありませんか?スレッドを同期するには?
C ++ 0xがセマフォなしで提供されるのは本当ですか?セマフォの使用に関するスタックオーバーフローに関する質問はすでにいくつかあります。私はそれら(posixセマフォ)を常に使用して、スレッドに別のスレッドのイベントを待機させます。 void thread0(...) { doSomething0(); event1.wait(); ... } void thread1(...) { doSomething1(); event1.post(); ... } 私がミューテックスでそれをするなら: void thread0(...) { doSomething0(); event1.lock(); event1.unlock(); ... } void thread1(...) { event1.lock(); doSomethingth1(); event1.unlock(); ... } 問題:醜く、スレッド1が最初にミューテックスをロックすることは保証されていません(同じスレッドがミューテックスをロックおよびロック解除する場合、スレッド1およびスレッド1が開始する前にイベント1をロックすることもできません)。 だからブーストにもセマフォがないので、上記を達成する最も簡単な方法は何ですか?


8
SynchronizationContextは何をしますか?
『Programming C#』の本には、サンプルコードがいくつか含まれていますSynchronizationContext。 SynchronizationContext originalContext = SynchronizationContext.Current; ThreadPool.QueueUserWorkItem(delegate { string text = File.ReadAllText(@"c:\temp\log.txt"); originalContext.Post(delegate { myTextBox.Text = text; }, null); }); スレッド初心者なので詳しくお答えください。まず、コンテキストの意味がわかりませんoriginalContext。プログラムは何を保存しますか?そして、Postメソッドが起動されると、UIスレッドは何をしますか? ばかげたことを聞いたら訂正してください、ありがとう! 編集:たとえばmyTextBox.Text = text;、メソッドに書き込むだけの場合、違いは何ですか?
135 c#  .net  multithreading 

3
イベントループについて
私はそれについて考えています、そしてこれは私が思いついたものです: 次のようなコードがあるとします。 console.clear(); console.log("a"); setTimeout(function(){console.log("b");},1000); console.log("c"); setTimeout(function(){console.log("d");},0); リクエストが届き、JSエンジンは上記のコードの実行を段階的に開始します。最初の2つの呼び出しは同期呼び出しです。しかし、setTimeoutメソッドに関しては、非同期実行になります。しかし、JSはすぐにそれから戻って、実行を継続する、と呼ばれていますNon-BlockingかAsync。そしてそれは他にも取り組んでいます。 この実行の結果は次のとおりです。 acdb つまり、基本的には2番目setTimeoutが最初に終了し、そのコールバック関数は最初のものよりも早く実行され、それは理にかなっています。 ここではシングルスレッドアプリケーションについて説明します。JS Engineはこれを実行し続け、最初のリクエストが終了しない限り、2番目のリクエストには進みません。しかし良い点は、setTimeout解決するようなブロック操作を待たないため、新しい着信要求を受け入れるため、処理が速くなることです。 しかし、私の質問は次の項目に関して発生します。 #1:シングルスレッドアプリケーションについて話している場合setTimeouts、JSエンジンがより多くのリクエストを受け入れて実行する間に、どのメカニズムが処理しますか?シングルスレッドは他のリクエストに対してどのように機能し続けますか?何が上で動作しsetTimeout、他の要求がでてくると実行を取得しています。 #2:これらのsetTimeout関数がバックグラウンドで実行され、さらに多くのリクエストが入って実行されている場合、バックグラウンドで非同期実行を実行するものは何ですか?私たちが話しているこのことは何と呼ばれていEventLoopますか? #3:しかし、メソッド全体をに入れEventLoopて、全体が実行され、コールバックメソッドが呼び出されるようにしないでください。これは、コールバック関数について話すときに理解できることです。 function downloadFile(filePath, callback) { blah.downloadFile(filePath); callback(); } しかし、この場合、JSエンジンは非同期関数であるかどうかをどのようにして認識し、コールバックEventLoop? Perhaps something like theをC#のasync`キーワードに入れるか、JSエンジンが行うメソッドが非同期メソッドであることを示す何らかの属性を置くことができます。それに応じて処理する必要があります。 #4:しかし、記事は、物事がどのように機能しているのかについて私が推測していたこととはまったく逆のことを言っています。 イベントループは、コールバック関数のキューです。非同期関数が実行されると、コールバック関数がキューにプッシュされます。JavaScriptエンジンは、非同期関数が実行された後のコードが実行されるまで、イベントループの処理を開始しません。 #5:この画像は参考になるかもしれませんが、画像の最初の説明は、質問番号4で述べたものとまったく同じことを言っています。 だから私の質問は、上記の項目についていくつかの説明を得ることですか?


3
packaged_taskとasyncの違いは何ですか
C ++ 11のスレッドモデルで作業しているときに、 std::packaged_task<int(int,int)> task([](int a, int b) { return a + b; }); auto f = task.get_future(); task(2,3); std::cout << f.get() << '\n'; そして auto f = std::async(std::launch::async, [](int a, int b) { return a + b; }, 2, 3); std::cout << f.get() << '\n'; まったく同じことをしているようです。で実行std::asyncした場合、大きな違いがある可能性があることは理解していますが、std::launch::deferredこの場合は違いますか? これらの2つのアプローチの違いは何ですか?さらに重要なことに、どのユースケースでどちらを使用するべきですか?

10
非同期vsマルチスレッド-違いはありますか?
非同期呼び出しは常に新しいスレッドを作成しますか?2つの違いは何ですか? 非同期呼び出しは常に新しいスレッドを作成または使用しますか? ウィキペディアは言う: コンピュータプログラミングでは、非同期イベントはメインプログラムフローとは無関係に発生するイベントです。非同期アクションは、非ブロックスキームで実行されるアクションであり、メインプログラムフローが処理を続行できるようにします。 シングルスレッドで非同期呼び出しを実行できることを知っていますか?これはどのようにして可能ですか?

16
Windowsスレッディング:_beginthreadと_beginthreadexとCreateThread C ++
スレッドを開始するためのより良い方法は何ですか_beginthread、_beginthreadxまたはCreateThread? 私はの長所/短所が何であるかを判断しようとしている_beginthread、_beginthreadexとCreateThread。これらのすべての関数は、新しく作成されたスレッドにスレッドハンドルを返します。エラーが発生すると、CreateThreadが少し追加の情報を提供することをすでに知っています(を呼び出すことで確認できますGetLastError)... mこれらの関数を使用していますか? 私はWindowsアプリケーションを使用しているので、クロスプラットフォームの互換性はすでに問題外です。 私はmsdnのドキュメントを読みましたが、たとえば、なぜCreateThreadではなく_beginthreadを使用するのか、またはその逆を行うのかを理解できません。 乾杯! 更新:わかりました。すべての情報に感謝します。WaitForSingleObject()を使用_beginthread()した場合は呼び出すことができない場所もいくつか読んだことがあります_endthread()が、スレッドで呼び出す場合は機能しませんか?そこでの契約は何ですか?
133 c++  c  multithreading  winapi 

6
Javaではどの並行キュー実装を使用する必要がありますか?
JavaDocsから: A ConcurrentLinkedQueueは、多くのスレッドが共通のコレクションへのアクセスを共有する適切な選択です。このキューはnull要素を許可しません。 ArrayBlockingQueueは、固定サイズの配列がプロデューサーによって挿入され、コンシューマーによって抽出された要素を保持する、古典的な「境界付きバッファー」です。このクラスは、待機中のプロデューサースレッドとコンシューマースレッドを注文するためのオプションの公平性ポリシーをサポートします LinkedBlockingQueueは、通常、アレイベースのキューよりもスループットは高くなりますが、ほとんどの並行アプリケーションでは予測できないパフォーマンスになります。 私には2つのシナリオがあります。1つは、1つのコンシューマーで多くのプロデューサー(それを使用するスレッド)をサポートするキューを必要とし、もう1つはその逆です。 使用する実装がわかりません。誰かが違いを説明できますか? また、「オプションの公平性ポリシー」とはArrayBlockingQueue何ですか?

7
Androidのバックグラウンドスレッドでコードを実行するにはどうすればよいですか?
一部のコードをバックグラウンドで継続的に実行してほしい。サービスでそれをしたくありません。他に可能な方法はありますか? 私はThread自分の中でクラスを呼び出してみましたActivityが、Activityしばらくの間バックグラウンドに留まり、その後停止します。Threadクラスには、作業を停止します。 class testThread implements Runnable { @Override public void run() { File file = new File( Environment.getExternalStorageDirectory(), "/BPCLTracker/gpsdata.txt" ); int i = 0; RandomAccessFile in = null; try { in = new RandomAccessFile( file, "rw" ); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch …

6
スレッドプールからスレッドIDを取得する方法
タスクを送信する固定スレッドプールがあります(5スレッドに制限されています)。これらの5つのスレッドの1つが私のタスクを実行していることをどのように確認できますか(「5番目のスレッド#3がこのタスクを実行している」など)。 ExecutorService taskExecutor = Executors.newFixedThreadPool(5); //in infinite loop: taskExecutor.execute(new MyTask()); .... private class MyTask implements Runnable { public void run() { logger.debug("Thread # XXX is doing this task");//how to get thread id? } }

3
C ++ 11でthread_localはどういう意味ですか?
thread_localC ++ 11 での説明と混同しています。私の理解では、各スレッドには関数内のローカル変数の一意のコピーがあります。グローバル/静的変数は、すべてのスレッドからアクセスできます(ロックを使用して同期アクセスされる場合があります)。そして、thread_local変数はすべてのスレッドに表示されますが、それらが定義されているスレッドによってのみ変更できますか?それが正しいか?


10
C ++ 11でのスレッドプーリング
関連する質問: C ++ 11について: C ++ 11:std :: thread pooled? C ++ 11のasync(launch :: async)は、高価なスレッドの作成を回避するためにスレッドプールを廃止しますか? ブーストについて: スレッドを再利用するC ++ブーストスレッド boost :: threadとそれらのプールの作成! タスクを何度も作成したり削除したりせずに、タスクをに送信するスレッドのプールを取得するにはどうすればよいですか?これは、結合せずに再同期する永続的なスレッドを意味します。 次のようなコードがあります。 namespace { std::vector<std::thread> workers; int total = 4; int arr[4] = {0}; void each_thread_does(int i) { arr[i] += 2; } } int main(int argc, char *argv[]) { …

5
マルチスレッドでvolatileを使用するのはいつですか?
グローバル変数にアクセスするスレッドが2つある場合、多くのチュートリアルでは、変数を揮発性にして、コンパイラーが変数をレジスターにキャッシュしないようにし、正しく更新されないようにします。ただし、共有変数にアクセスする2つのスレッドは、ミューテックスを介して保護を要求するものではありませんか。しかし、その場合、スレッドのロックとミューテックスの解放の間に、コードはその1つのスレッドだけが変数にアクセスできるクリティカルセクションにあります。この場合、変数は揮発性である必要はありませんか? したがって、マルチスレッドプログラムでのvolatileの使用/目的は何ですか?

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