SoftwareとConcurrency Revolution(htmlバージョン)という名前の並行性に関する研究論文を読んでいたとき。私は次の行に出くわしました:
残念ながら、ロックは機能しますが、最新のソフトウェア開発にとって深刻な問題を引き起こします。ロックの基本的な問題は、ロックが構成可能でないことです。正しいロックベースのコードを2つ取り、それらを組み合わせて、結果がまだ正しいことを知ることはできません。現代のソフトウェア開発は、ライブラリをより大きなプログラムに構成する機能に依存しているため、ロックベースのコンポーネントを、その実装を調査せずに構築することは困難です。
私は、Javaがどのように構成可能な同時実行性を保証するか、あるいはこのシナリオを生成する方法があるかさえ考えていました。
また、1つ以上のライブラリのデータをどのように同期させることができますか?プログラマーは自分のプログラムからそれを行うことができますか、それとも物事を同期させるのはライブラリ次第です。
Javaでない場合、ロックベースの同時実行を使用し、構成可能な同時実行を保証する他の言語はありますか?
以下も同じ論文から引用したものです。
同期メソッドには少なくとも3つの大きな問題があります。1つは、他のオブジェクト(Javaのベクターや.NETのSyncHashTableなど)の仮想関数を呼び出すメソッドを持つ型には適していません。ロックを保持したままサードパーティのコードを呼び出すと、デッドロックが発生する可能性があるためです。第2に、同期されたメソッドは、すべてのオブジェクトインスタンスのロックを取得および解放することにより、多くのロックを実行する可能性があります。第3に、プログラムがオブジェクトまたは異なるオブジェクトに対して複数のメソッドを呼び出すときに原子性を維持しないため、同期化されたメソッドはロックをほとんど実行できません。後者の簡単な例として、銀行振込を考えてみましょう。account1.Credit(amount); account2.Debit(amount)...
注:論文は2005年9月に発行されました