2

Javaで重要な領域を検出するにはどうすればいいですか?私はそれが2つの原子プロセスで相互排除を実装することであることを理解しますが、これが重要な領域であると判断するために探している一般的なものは何ですか。Javaで重要な領域を検出するにはどうすればいいですか?

は私が知っていることは非常に興味があるかどうか:

  • Javaの重要な領域内のすべての同期方法?

  • は、Javaの並行システムでのみ検出される重要な領域ですか?

    値を設定または取得しますが、これらのスレッドされたときに、ユースケースは、この壊れ値が原因壊れた場合ははい、それは、「壊れた」とみなすことができる場合は、一部の値が複数のスレッド間で共有されているかどうかを確認する必要が
+1

"のみJavaで並行システムで見つかった重要な地域はありますか?" - どのように** "クリティカルな地域"を定義しますか?システムが「並行」でない場合、システムはその定義をどのように満たすことができますか? – Fildor

+0

クリティカルセクションは、それを定義するものです。スレッドの安全性の観点からではなく、パフォーマンスから重要なクリティカルセクションを持つことができます。 –

+0

あなたはそれらを検出しません。あなたはそれらをデザインします。あなたが何を求めているのか不明です。 – EJP

答えて

0

それを重要な地域にロックする。並行処理で

2

Critical Section単につのスレッドが他の又はつのスレッドがへの書き込みしようとしている同一のメモリに書き込んでいるときに、メモリから/に読み取り/書き込みが可能コードの断片であります他のスレッドが同じメモリから読み込んでいるときのメモリ

概要

  • スレッド1 - 書きます|スレッド2 - 書き込み|安全性 - いいえ

  • スレッド1 - 書き込み|スレッド2 - 読む|安全性 - いいえ

  • スレッド1 - 読み取り|スレッド2 - 書き込み|安全性 - いいえ

  • スレッド1 - 読み取り|スレッド2 - 読む|安全性 - はい

すなわち彼らは、我々はそれ以上の適切なcontrolを実装していない場合、それは可能性のあるエラー/誤動作を引き起こす可能性があります、私たちのプログラムでセクションです。 (例:ロック、セマフォー、バリアーなど)

そしてJavaには適用されません。スレッドをサポートするプログラミング言語に適用されます。

+1

+1、私はこれが公平なプログラミングの正式な用語であることは知らなかった:https://en.wikipedia.org/wiki/Critical_section(たとえそれがOPと言っている地域ではなくセクションであっても)。 2番目の質問については、特にJavaに関する質問はよく分かりませんが、「並行システムでのみ重要な領域が見つかるのですか?」と答えていますが、明らかにこの用語はparrallelプログラミングに関係するため、答えはイエスです。 – Asoub

+0

@Asoubはい。 「クリティカル」という言葉は、それが使われている文脈ごとに異なる解釈を持つことができます。私はちょうどそれが並行プログラミングの文脈の中で何を意味するか述べました。 :)あなたのソースのthnx、私は私の答えにそれを追加しました。 :)) –

2

Javaクリティカルリージョン内のすべての同期メソッド?

だけでなく​​メソッド/ブロック、コードLock APIを使用して、あまりにもクリティカル領域(セクション)クリティカルセクションを守るの

複数の方法を守ります。

1。同期方法:

public synchronized void incrementCounter(){ 
    ++counter; 
} 

2.同期文

public int getCounter(){ 
    synchronized(this){ 
     return counter; 
    } 
} 

3.ロックAPI

class X { 
    private final ReentrantLock lock = new ReentrantLock(); 
    // ... 

    public void m() { 
    lock.lock(); // block until condition holds 
    try { 
     // ... method body, which is critical section 
    } finally { 
     lock.unlock() 
    } 
    } 
} 

便利なSEの質問:

Why use a ReentrantLock if one can use synchronized(this)?

Avoid synchronized(this) in Java?

のみ、Javaの並行システムで見つかった重要な領域ですか?

いいえ、他の言語でも見つかります。

関連SEの質問:

C# version of java's synchronized keyword?

Does PHP have the equivilant to Java 'synchronized' , or is this not required?

関連する問題