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

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

4
C#:静的メソッドが複数のスレッドから呼び出された場合はどうなりますか?
私のアプリケーションには、複数のスレッドから同時に呼び出される静的メソッドがあります。データが混同される危険性はありますか? 最初の試みでは、メソッドは静的ではなく、クラスの複数のインスタンスを作成していました。その場合、私のデータはどういうわけか混乱しました。たまにしか発生しないため、これがどのように発生するかはわかりません。まだデバッグ中です。しかし今、メソッドは静的です。今のところ問題はありません。多分それは運だけです。よくわかりません。

9
タイムアウト後にタスクを中断するExecutorService
タイムアウトを指定できるExecutorService実装を探しています。ExecutorServiceに送信されたタスクは、実行にタイムアウトよりも長い時間がかかると中断されます。そのような獣を実装することはそれほど難しい作業ではありませんが、誰かが既存の実装を知っているかどうか疑問に思っています。 以下は、以下の議論に基づいて私が思いついたものです。コメントは? import java.util.List; import java.util.concurrent.*; public class TimeoutThreadPoolExecutor extends ThreadPoolExecutor { private final long timeout; private final TimeUnit timeoutUnit; private final ScheduledExecutorService timeoutExecutor = Executors.newSingleThreadScheduledExecutor(); private final ConcurrentMap<Runnable, ScheduledFuture> runningTasks = new ConcurrentHashMap<Runnable, ScheduledFuture>(); public TimeoutThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, long timeout, TimeUnit timeoutUnit) …

28
簡単なデッドロックの例
初心者にスレッドデッドロックについて説明したいと思います。私は過去に多くのデッドロックの例を見てきました。コードを使用したり、イラストを使用したりします(有名な4台の車など)。The Dining Philosophersのような、簡単に行き詰まりがちな古典的な問題もありますが、本当の初心者には完全に理解するには複雑すぎる場合があります。 デッドロックとは何かを説明する最も簡単なコード例を探しています。例は次のようにする必要があります。 ある意味のある「実際の」プログラミングシナリオに関連する 非常に短く、シンプルでわかりやすい 何がお勧めですか?

3
Rubyでスレッドセーフでないものを知る方法は?
Rails 4以降、デフォルトではすべてがスレッド環境で実行される必要があります。これが意味することは、私たちが書くコードのすべてであると ALL我々が使用する宝石があることが要求されていますthreadsafe だから、私はこれについていくつか質問があります: ruby / railsでスレッドセーフでないものは何ですか?対ルビー/レールのスレッドセーフは何ですか? スレッドセーフまたはその逆であることが知られている宝石のリストはありますか? スレッドセーフな例ではないコードの一般的なパターンのリストはあり@result ||= some_methodますか? Hashetcなどのruby langコアのデータ構造はスレッドセーフですか? MRIでは、GVL/GILを除いて一度に実行できるルビスレッドが1つだけであることを意味する/IOがありますが、スレッドセーフな変更は影響を及ぼしますか?

6
CountDownLatchとセマフォ
使用する利点はありますか java.util.concurrent.CountdownLatch の代わりに java.util.concurrent.Semaphore? 私の知る限り、次のフラグメントはほぼ同等です。 1.セマフォ final Semaphore sem = new Semaphore(0); for (int i = 0; i < num_threads; ++ i) { Thread t = new Thread() { public void run() { try { doStuff(); } finally { sem.release(); } } }; t.start(); } sem.acquire(num_threads); 2:CountDownLatch final CountDownLatch latch …

8
スレッドからの戻り値
私はHandlerThread。内部で値が変更され、Threadそれをtest()メソッドに返したいのですが。これを行う方法はありますか? public void test() { Thread uiThread = new HandlerThread("UIHandler"){ public synchronized void run(){ int value; value = 2; //To be returned to test() } }; uiThread.start(); }

3
終わりのないタスクを実装するための適切な方法。(タイマーvsタスク)
そのため、私のアプリは、アプリが実行されているか、キャンセルが要求されている限り、ほぼ連続的に(実行ごとに10秒程度の休止を置いて)アクションを実行する必要があります。必要な作業には、最大30秒かかる可能性があります。 System.Timers.Timerを使用し、AutoResetを使用して、前の「ティック」が完了する前にアクションが実行されないようにすることをお勧めします。 または、キャンセルトークンを使用してLongRunningモードで一般的なタスクを使用し、呼び出しの間に10秒間のThread.Sleepを使用してアクションを実行するアクションを呼び出す通常の無限whileループを含める必要がありますか?非同期/待機モデルについては、作業からの戻り値がないため、ここが適切かどうかはわかりません。 CancellationTokenSource wtoken; Task task; void StopWork() { wtoken.Cancel(); try { task.Wait(); } catch(AggregateException) { } } void StartWork() { wtoken = new CancellationTokenSource(); task = Task.Factory.StartNew(() => { while (true) { wtoken.Token.ThrowIfCancellationRequested(); DoWork(); Thread.Sleep(10000); } }, wtoken, TaskCreationOptions.LongRunning); } void DoWork() { // Some work that takes …



4
再入可能ロックと一般的なコンセプトは何ですか?
私はいつも混乱します。誰かがさまざまな状況でリエントラントが何を意味するかを説明できますか?そして、なぜ再入可能ではなく再入可能を使用したいのですか? pthread(posix)ロックプリミティブと言いますが、それらは再入可能ですか?それらを使用するときに回避すべき落とし穴は何ですか? mutexは再入可能ですか?

16
すべてのスレッドがJavaでの作業を完了するまで待ちます
私は、Webからいくつかの情報を同時に取得し、バッファクラスの5つの異なるフィールドに入力する5つのスレッドを持つアプリケーションを作成しています。 すべてのスレッドがジョブを終了したら、バッファデータを検証してデータベースに保存する必要があります。 これを行うにはどうすればよいですか(すべてのスレッドが作業を終了したときに警告されます)?

8
非最終フィールドの同期
非最終クラスフィールドで同期するたびに警告が表示されます。コードは次のとおりです。 public class X { private Object o; public void setO(Object o) { this.o = o; } public void x() { synchronized (o) // synchronization on a non-final field { } } } だから私は次のようにコーディングを変更しました: public class X { private final Object o; public X() { o = new Object(); } …

7
MemoryCacheスレッドセーフ、ロックは必要ですか?
手始めに、以下のコードはスレッドセーフではないことがわかっているので、それを捨てさせてください(修正:そうかもしれません)。私が苦労しているのは、テストで実際に失敗する可能性のある実装を見つけることです。現在、大規模なWCFプロジェクトをリファクタリングしています。このプロジェクトでは、(ほとんどの場合)静的データをキャッシュし、SQLデータベースからデータを取り込む必要があります。少なくとも1日に1回は有効期限が切れて「更新」する必要があるため、MemoryCacheを使用しています。 以下のコードはスレッドセーフであってはならないことは知っていますが、高負荷で失敗することはなく、問題を複雑にするために、グーグル検索は両方の方法で実装を示しています(ロックの有無と必要かどうかの議論が組み合わされています。 マルチスレッド環境でのMemoryCacheの知識がある人は、削除の呼び出し(めったに呼び出されませんが、その要件)が取得/再入力中にスローされないように、必要に応じてロックする必要があるかどうかを明確に教えてくれますか? public class MemoryCacheService : IMemoryCacheService { private const string PunctuationMapCacheKey = "punctuationMaps"; private static readonly ObjectCache Cache; private readonly IAdoNet _adoNet; static MemoryCacheService() { Cache = MemoryCache.Default; } public MemoryCacheService(IAdoNet adoNet) { _adoNet = adoNet; } public void ClearPunctuationMaps() { Cache.Remove(PunctuationMapCacheKey); } public IEnumerable GetPunctuationMaps() { if …

7
セマフォ-初期カウントの用途は何ですか?
http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx セマフォを作成するには、初期カウントと最大カウントを指定する必要があります。MSDNによると、初期カウントは- 同時に許可できるセマフォの最初の要求数。 最大数は 同時に許可できるセマフォのリクエストの最大数。 最大数は、リソースに同時にアクセスできるスレッドの最大数であることが理解できます。しかし、初期カウントの使用は何ですか? 初期カウントが0で最大カウントが2のセマフォを作成すると、どのスレッドプールスレッドもリソースにアクセスできなくなります。初期カウントを1に設定し、最大カウントを2に設定すると、スレッドプールスレッドのみがリソースにアクセスできます。初期カウントと最大カウントの両方を2に設定した場合にのみ、2つのスレッドがリソースに同時にアクセスできます。それで、私は最初のカウントの重要性について本当に混乱していますか? SemaphoreSlim semaphoreSlim = new SemaphoreSlim(0, 2); //all threadpool threads wait SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 2);//only one thread has access to the resource at a time SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2, 2);//two threadpool threads can access the resource concurrently

9
Android SDK AsyncTask doInBackgroundが実行されていません(サブクラス)
2012年2月15日の時点では、これがうまく機能しない理由や理由がまだわかりません。ソリューションに最も近いのは、従来のスレッドアプローチを使用することですが、なぜAndroid SDKで機能しない(と思われる)クラスを含めるのでしょうか。 Evenin 'SO! 私はAsyncTaskサブクラスを持っています: // ParseListener had a callback which was called when an item was parsed in a // RSS-xml, but as stated further down it is not used at all right now. private class xmlAsync extends AsyncTask<String, RSSItem, Void> implements ParseListener これは次のように実行されます。 xmlAsync xmlThread = new xmlAsync(); …

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