C#アプリケーションで「ボックス化」オブジェクトをロックしようとしていますが、これは不可能ですか?C#スレッド - ロックオブジェクト
Thread b1 = new Thread(new ThreadStart(t1.w));
b1.Start();
Thread b2 = new Thread(new ThreadStart(t1.w));
b2.Start();
部分がロックされていないが:別のクラスにおいて
class t
{
System.Object t_x = new object();
public t(int p)
{
t_x = p;
}
public void w()
{
lock (t_x)
{
for (int i = 0; i < 4; i++)
{
{
t_x = ((int)t_x) + 1;
Console.WriteLine(t_x);
Thread.Sleep(1000);
}
}
}
}
}
私は2つのスレッドを開始することができます。 任意のオブジェクト(オブジェクトとして作成され、オブジェクトとして変更されていないオブジェクト)をロックすると、ロックされます。 ボクシング操作はどういうわけか "depromotes"私のオブジェクトですか?
なぜあなたはロックブロック内のロックオブジェクトを再割り当てしますか?それは目的を打ち負かします - 同期の全体のポイントは、diffスレッドが "共有"リソースのために互いを踏み合わないようにすることです。 – Gishu
私は答えが良いものではないと受け入れたと思っています –
経験の浅い試した.NETスレッドの中には、ロックステートメントがロックを実際に「ロック」したり、オブジェクトを保護するという誤った繰り返しがあるようです。オブジェクトは、コードのロックされたブロック、つまりクリティカルセクションのキーとなるという事実を見逃しているようです。 –