私は最近、あなたが参照しているオブジェクトを単にロックする目的とロックする目的のためにセカンダリオブジェクトを使用することの違いを、スレッド化してプレイし始めた友人から頼まれました。誰も私に教えてもらえますか?私が試してみて、コードスニペットのカップルと実証します:指定されたオブジェクトのロックとセカンダリオブジェクトのロックの違いは何ですか?
最初の方法:
List<string> data = new List<string>();
object datalock = new object();
void main()
{
lock(datalock)
{
if (data.contains("SomeSearchString"))
{
//Do something with the data and then remove it
}
}
}
第二の方法:
List<string> data = new List<string>();
void main()
{
lock(data)
{
if (data.contains("SomeSearchString"))
{
//Do something with the data and then remove it
}
}
}
有意差があるか、これは個人的なコーディングスタイルにダウンしているのですか?重要な違いがある場合は、誰でもそれが何であるか説明できますか?
私は別の質問[Difference between lock(locker) and lock(variable_which_I_am_using)]に出くわしましたが、答えが両方とも同等であることが暗示されていましたが、その場合、使用するのがベストで、その理由は何ですか?
私は、ネットの周りに散在しているいくつかの例を見てきましたが、最初の方法を個人的な選択として使用する傾向がありましたが、2番目の方法を使用するメリットはどういうものかと思いました。
私はちょうどそれをタイプしていました... 私が追加しようとしていた唯一の事は、プライマリオブジェクトのロックは、スーパークラスのロック戦略に参加するために何をしているのかを知っているサブクラスが、しかし、彼らが何をしているのか分からない消費者が追加の問題を引き起こす危険性があります。 –