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

同期とは、コントロールを使用して、同じプログラムを実行するプロセスのグループ(プロセスの同期)またはデータの表現(データの同期)の一貫した表現を維持することを指します。

8
ロックはどのように正確に機能しますか?
スレッドセーフではないオブジェクトを使用する場合、次のようなロックでコードをラップすることがわかります。 private static readonly Object obj = new Object(); lock (obj) { // thread unsafe code } したがって、複数のスレッドが同じコードにアクセスするとどうなりますか(ASP.NET Webアプリケーションで実行されていると仮定しましょう)。彼らはキューに入っていますか?もしそうなら、彼らはどれくらい待つでしょうか? ロックを使用することによるパフォーマンスへの影響は何ですか?

22
Javaで同期(これ)を避けますか?
Javaの同期についての質問がSOに出てくるときはいつでも、synchronized(this)避けなければならないことを非常に熱心に指摘する人もいます。代わりに、プライベートリファレンスのロックが優先されると主張しています。 指定された理由のいくつかは次のとおりです。 いくつかの邪悪なコードがあなたのロックを盗む可能性があります(これは非常に人気があり、「偶然に」変種もあります) 同じクラス内のすべての同期されたメソッドは、まったく同じロックを使用するため、スループットが低下します (不必要に)情報を公開しすぎている 私を含む他の人々synchronized(this)は、それが(Javaライブラリーでも)よく使用されるイディオムであり、安全でよく理解されていると主張します。バグがあり、マルチスレッドプログラムで何が行われているかの手掛かりがないため、これを回避することはできません。つまり、該当する場合はそれを使用します。 私は、ロックオンを回避するthisことが望ましい場合に、ロックオンを回避することが望ましい実際の例(foobarのものではない)をいくつか見ることに興味synchronized(this)があります。 したがって、常に避けsynchronized(this)て、プライベートリファレンスのロックに置き換える必要がありますか? いくつかの詳細情報(回答が提供されると更新されます): インスタンスの同期について話している の暗黙的な(synchronizedメソッド)と明示的な形式のsynchronized(this)両方が考慮されます この件に関してBlochまたは他の当局を引用する場合は、好ましくない部分を省略しないでください(例:効果的なJava、スレッドセーフティの項目:通常はインスタンス自体のロックですが、例外があります)。 synchronized(this)提供以外の細かいロックが必要な場合synchronized(this)は適用されないため、問題はありません。

5
Javaの同期キーワードのC#バージョン?
c#には、独自のバージョンのJavaの「synchronized」キーワードがありますか? つまり、Javaでは、次のように、関数、オブジェクト、またはコードブロックのいずれかに指定できます。 public synchronized void doImportantStuff() { // dangerous code goes here. } または public void doImportantStuff() { // trivial stuff synchronized(someLock) { // dangerous code goes here. } }

7
アトミック/揮発性/同期の違いは何ですか?
アトミック/揮発性/同期化は内部的にどのように機能しますか 次のコードブロックの違いは何ですか? コード1 private int counter; public int getNextUniqueIndex() { return counter++; } コード2 private AtomicInteger counter; public int getNextUniqueIndex() { return counter.getAndIncrement(); } コード3 private volatile int counter; public int getNextUniqueIndex() { return counter++; } volatile次のように機能しますか?です volatile int i = 0; void incIBy5() { i += 5; } に相当 …


5
Objective-Cで@同期ロック/ロック解除はどのように行われますか?
@synchronizedは相互ロックを実現するために「ロック」と「ロック解除」を使用しませんか?では、どのようにしてロック/ロック解除しますか? 次のプログラムの出力は「Hello World」のみです。 @interface MyLock: NSLock<NSLocking> @end @implementation MyLock - (id)init { return [super init]; } - (void)lock { NSLog(@"before lock"); [super lock]; NSLog(@"after lock"); } - (void)unlock { NSLog(@"before unlock"); [super unlock]; NSLog(@"after unlock"); } @end int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = …

10
同期とロック
java.util.concurrentAPIはと呼ばれるクラスを提供しますLock。これは基本的に、重要なリソースにアクセスするためにコントロールをシリアル化します。park()およびなどのメソッドを提供しunpark()ます。 synchronizedキーワードとusing wait()およびmethodを使用できれば、同様のことができますnotify() notifyAll()。 これらのうちどれが実際に優れているのか、なぜですか?

8
同期された静的メソッドはJavaでどのように機能し、それをHibernateエンティティのロードに使用できますか?
基本的なデータアクセスを実行するためにHibernate関数を呼び出す静的メソッドを持つutilクラスがある場合。メソッドの作成がsynchronizedスレッドの安全性を確保するための適切なアプローチであるかどうか疑問に思っています。 これにより、同じDBインスタンスへの情報へのアクセスを防ぐことができます。ただし、次のコードがgetObjectById特定のクラスから呼び出されたときに、すべてのクラスに対して呼び出されるのを妨げているかどうかは確信しています。 public class Utils { public static synchronized Object getObjectById (Class objclass, Long id) { // call hibernate class Session session = new Configuration().configure().buildSessionFactory().openSession(); Object obj = session.load(objclass, id); session.close(); return obj; } // other static methods }

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


6
Java静的初期化子はスレッドセーフですか?
静的コードブロックを使用して、レジストリ内のいくつかのコントローラーを初期化しています。したがって、私の質問は、クラスが最初にロードされたときに、この静的コードブロックが絶対に一度だけ呼び出されることを保証できますか?このコードブロックがいつ呼び出されるかは保証できないことを理解しています。Classloaderが最初にそれをロードしたときに、それを推測しています。静的コードブロックのクラスで同期できることはわかっていますが、これは実際に何が起きているのでしょうか。 簡単なコード例は次のようになります。 class FooRegistry { static { //this code must only ever be called once addController(new FooControllerImpl()); } private static void addController(IFooController controller) { // ... } } または私はこれを行うべきですか? class FooRegistry { static { synchronized(FooRegistry.class) { addController(new FooControllerImpl()); } } private static void addController(IFooController controller) { // ... } }

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をロックすることもできません)。 だからブーストにもセマフォがないので、上記を達成する最も簡単な方法は何ですか?


5
Javaでクラスの異なるインスタンスを実行しているスレッド間で静的変数を同期する方法は?
synchronizeメソッドの前にキーワードを使用すると、そのオブジェクトが同期されることを知っています。つまり、オブジェクトの同じインスタンスを実行している2つのスレッドが同期されます。 ただし、同期はオブジェクトレベルであるため、オブジェクトの異なるインスタンスを実行する2つのスレッドは同期されません。メソッドによって呼び出されるJavaクラスに静的変数がある場合、クラスのインスタンス間でそれを同期させる必要があります。2つのインスタンスは2つの異なるスレッドで実行されています。 次の方法で同期を達成できますか? public class Test { private static int count = 0; private static final Object lock= new Object(); public synchronized void foo() { synchronized(lock) { count++; } } } lock静的なオブジェクトを定義し、synchronizedそのロックにキーワードを使用しているため、静的変数countがクラスのインスタンス間で同期されているのは本当Testですか?

8
Javaシングルトンと同期
シングルトンとマルチスレッドに関する私の質問を明確にしてください: マルチスレッド環境でJavaにシングルトンを実装する最良の方法は何ですか? 複数のスレッドgetInstance() が同時にメソッドにアクセスしようとするとどうなりますか? シングルトンを作れgetInstance() synchronizedますか? シングルトンクラスを使用する場合、同期は本当に必要ですか?

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