在我的应用程序具有低于类2个线程之间的同步中的一个。
- SynchornizingMethods讲座>将由线程1和线程共享2.
- DemoClass1 - >通过螺纹简称1
- DemoClass2 - >由线程2
- SynchornizingDemo.Demo()简称 - >方法是程序的入口点。
预期输出:
线程1(DemoClass1)和线程2(DemoClass2),直到这两个线程完成它们的环在各自的XXXXRun()方法应该平行地延伸。
现状:
程序,当我从我的应用程序调用SynchornizingDemo.Demo()只是挂起。
代码:
public class SynchornizingMethods
{
static string SharedVariableString = string.Empty;
bool threadFlag = true;
public void Method1(int inputVal)
{
lock (this)
{
if (threadFlag == true)
{
try
{
Monitor.Wait(this);
}
catch (SynchronizationLockException SLE)
{
SharedVariableString += "\nMethod 1 : " + SLE.Message.ToString();
}
catch (ThreadInterruptedException TIE)
{
SharedVariableString += "\nMethod 1 : " + TIE.Message.ToString();
}
SharedVariableString += "\nMethod 1 : " + inputVal;
threadFlag = false;
}
Monitor.Pulse(this);
}
}
public void Method2(int inputVal)
{
lock (this)
{
if (threadFlag == false)
{
try
{
Monitor.Wait(this);
}
catch (SynchronizationLockException SLE)
{
SharedVariableString += "\nMethod 2 : " + SLE.Message.ToString();
}
catch (ThreadInterruptedException TIE)
{
SharedVariableString += "\nMethod 2 : " + TIE.Message.ToString();
}
SharedVariableString += "\nMethod 2 : " + inputVal;
threadFlag = true;
}
Monitor.Pulse(this);
}
}
public static void DisplayResult()
{
MessageBox.Show(SharedVariableString);
}
}
public class DemoClass1
{
SynchornizingMethods SyncMethodsObj;
public DemoClass1(SynchornizingMethods _SyncMethodsObj)
{
SyncMethodsObj = _SyncMethodsObj;
}
public void DemoThread1Run()
{
// Even Incrementor.
for (int lpCnt = 0; lpCnt <= 20; lpCnt += 2)
{
//Thread.Sleep(10);
SyncMethodsObj.Method1(lpCnt);
}
}
}
public class DemoClass2
{
SynchornizingMethods SyncMethodsObj;
public DemoClass2(SynchornizingMethods _SyncMethodsObj)
{
SyncMethodsObj = _SyncMethodsObj;
}
public void DemoThread2Run()
{
// Odd Incrementor.
for (int lpCnt = 1; lpCnt <= 20; lpCnt += 2)
{
//Thread.Sleep(10);
SyncMethodsObj.Method2(lpCnt);
}
}
}
public class SynchornizingDemo
{
public void Demo()
{
SynchornizingMethods SyncMethodsObj = new SynchornizingMethods();
DemoClass1 DemoClass1Obj = new DemoClass1(SyncMethodsObj);
DemoClass2 DemoClass2Obj = new DemoClass2(SyncMethodsObj);
try
{
Thread thread1Obj = new Thread(new ThreadStart(DemoClass1Obj.DemoThread1Run));
Thread thread2Obj = new Thread(new ThreadStart(DemoClass2Obj.DemoThread2Run));
thread1Obj.Start();
thread2Obj.Start();
thread1Obj.Join();
thread2Obj.Join();
}
catch (ThreadStateException TSE)
{
Debug.WriteLine(" Exception Raised SynchornizingDemo : " + TSE.Message.ToString());
}
catch (ThreadInterruptedException TIE)
{
Debug.WriteLine(" Exception Raised SynchornizingDemo : " + TIE.Message.ToString());
}
SynchornizingMethods.DisplayResult();
}
}
该代码“看起来”不完整,当然不会被任何人编译。你也在说“不按预期工作” - 它如何工作,你会得到什么结果。 – iandotkelly
@iandotkelly,是的,它完成的代码只需要调用SynchornizingDemo.Demo()进行测试,这是我在第一篇文章中提到的,但修改该语句的人被删除并导致混淆。我已经发布了下面的工作计划。 – Sai