ASP.NET:一段比较经典的多线程学习代码
一段比较经典的多线程学习代码。
1、用到了多线程的同步问题。
2、用到了多线程的顺序问题。
如果有兴趣的请仔细阅读下面的代码。注意其中代码段的顺序,思考一下,这些代码的顺序能否互相调换,为什么?这应该对学习很有帮助的。为了演示,让所有的线程都Sleep了一段时间。
usingSystem.Net;
usingSystem;
usingSystem.IO;
usingSystem.Text;
usingSystem.Threading;
usingSystem.Diagnostics;
namespaceWebb.Study
{
classTestThread
{
staticMutexm_Mutex =newMutex();
staticThread[]m_testThreads =newThread[10];
staticintm_threadIndex =0;
staticvoidThreadCallBack()
{
TestThread.m_Mutex.WaitOne();
intm_index =m_threadIndex;
TestThread.m_Mutex.ReleaseMutex();
Console.WriteLine("Thread{0}start.",m_index);
for(inti=0;i<=10;i++)
{
TestThread.m_Mutex.WaitOne();
Console.WriteLine("Thread{0}:isrunning.{1}",m_index,i);
TestThread.m_Mutex.ReleaseMutex();
Thread.Sleep(100);
}
Console.WriteLine("Thread{0}end.",m_index);
}
publicstaticvoidMain(String[]args)
{
Console.WriteLine("Mainthreadstart.");
for(inti=0;i<TestThread.m_testThreads.Length;i++)
{
TestThread.m_threadIndex =i;
TestThread.m_testThreads[i] =newThread(newThreadStart(ThreadCallBack));
TestThread.m_testThreads[i].Start();
Thread.Sleep(100);
}
for(inti=0;i<TestThread.m_testThreads.Length;i++)
{
TestThread.m_testThreads[i].Join();
}
Console.WriteLine("Mainthreadexit.");
}
}
}
1、主函数中这两句能否互换?为什么?
Thread.Sleep(100);
2、CallBack函数中这两句能否互换?为什么?会有什么不同的结果?
Thread.Sleep(100);
3、主函数能否写成这样?为什么?会有什么不同的结果?
{
Console.WriteLine("Mainthreadstart.");
for(inti=0;i<TestThread.m_testThreads.Length;i++)
{
TestThread.m_threadIndex =i;
TestThread.m_testThreads[i] =newThread(newThreadStart(ThreadCallBack));
TestThread.m_testThreads[i].Start();
TestThread.m_testThreads[i].Join();
Thread.Sleep(100);
}
Console.WriteLine("Mainthreadexit.");
}
4、这几句的作用是什么?那么程序中还存在什么样的问题?应该做怎样的修改?
intm_index=m_threadIndex;
TestThread.m_Mutex.ReleaseMutex();
仅做学习讨论。
相关文章
- .Net 5.0 通过IdentityServer4实现单点登录之客户端通过授权码换取IdToken和AcessToken并访问Api部分源码解析
- asp.net mvc 下拉框级联
- [.NET控件]Telerik RadControls for ASP.NET AJAX 2008 Q1 net 2.0 Web.UI「建议收藏」
- .Net Native Code
- 宝塔面板Linux系统通过Docker部署VB.NET Asp.Net Core WebAPI应用
- [接上篇]在Window10/11的Linux子系统Docker上部署VB.NET Asp.Net Core WebAPI应用
- Windows Server2012服务器安装SqlServer数据库和.NET Framework 3.5图文教程
- ASP如何连接MySQL数据库(asp怎么连接mysql)
- .netLinux下部署ASP.NET环境指南(linux部署asp)
- p.netMSSQL数据库搭配ASP.NET实现强大的网站功能(mssqlas)
- ASP实现与MySQL数据库的连接(asp连接mysql源码)
- Asp.Net和AJAX.Net的区别
- asp.net下经典数据库记录分页代码
- asp.net注册Javascript的方法
- asp.net+jqueryGridview的多行拖放,以及跨控件拖放
- ASP.NET中基于JQUERY的高性能的TreeView补充
- 使用ASP.NET一般处理程序或WebService返回JSON的实现代码
- Asp.net控制Tomcat启动关闭的实现方法
- asp.net临时数据保存实现代码
- ASP.net(c#)生成条形码code39条码生成方法
- asp.netC#实现下载文件的六种方法实例
- asp.net动态产生checkbox(数据源为DB或内存集合)
- ASP.NET回发密码框清空问题处理方法
- asp.net自定义控件中注册Javascript问题解决方案