{A}{S0的}介绍
信号量是一个同步技术,在这里我们可以控制线程的数量访问anbsp;资源。在锁/互斥,时间只有一个线程可以访问的资源。但信号灯允许多个线程tonbsp;一次访问相同的资源。我们可以限制线程thatnbsp的数量可以访问相同的thenbsp;资源。在这篇文章中,我已经展示了三种不同的方式来访问资源。无1。不同步NO-2。与监视器同步NO-3。与信号灯同步使用代码不同步
没有同步,所有线程同时运行,并同时执行同一段代码。有多少线程可以访问它没有限制。以下是代码:
与监视器同步private void btnNoSync_Click(object sender, EventArgs e)
{
listBox1.Items.Add("== No Synchronization ===========");
int TotalThread = 5;
Thread[] Threads = new Thread[TotalThread];
for (int i = 0; i < TotalThread; i++)
{
Threads[i] = new Thread(new ThreadStart(AccessCode));
Threads[i].IsBackground = true;
Threads[i].Start();
}
}
public void AccessCode()
{
listBox1.BeginInvoke(new ParameterizedThreadStart(UpdateUI), new object[]
{"Thread ID : " + Thread.CurrentThread.ManagedThreadId.ToString() + ": Entered" }
);
Thread.Sleep(500);
listBox1.BeginInvoke(new ParameterizedThreadStart(UpdateUI), new object[]
{ "Thread ID : " + Thread.CurrentThread.ManagedThreadId.ToString() + " : Exit" }
);
}
// Following code is used to update UI
public void UpdateUI(object objOutput)
{
listBox1.Items.Add(objOutput.ToString());
}
同步显示器类,只有一个线程可以访问相同的资源,在同一时间。线程同时运行,但它可以在一次访问块代码之一。有线程上的限制,所以,只有一个线程可以访问一个特定的代码块。{C}与信号灯同步
在同步信号类,我们可以允许多个线程访问同一代码块。其实,我们可以指定多少线程可以在同一时间同一代码块的访问。
测试代码
信号可以很容易地测试。运行的应用程序,并按下所有的按钮逐个看到这控制线程thatnbsp的总数的信号效果;可以同时执行一些代码块。信号是一个资源的同步技术和全系统同步资源。历史2011年11月19日,初始后