多线程问题,,如何让所有子线程结束后再执行主线程,,要C#
objclasst1=newobjclass(pRow,pRow2,pCursor,pCursor2,i,fieldIndex,0,prowcount/4);Thread...
objclass t1 = new objclass(pRow, pRow2, pCursor, pCursor2, i, fieldIndex, 0, prowcount / 4);
Thread thread1 = new Thread(t1.xunhuan);
objclass t2 = new objclass(pRow, pRow2, pCursor, pCursor2, i, fieldIndex, prowcount / 4, prowcount / 2);
Thread thread2 = new Thread(t2.xunhuan);
objclass t3 = new objclass(pRow, pRow2, pCursor, pCursor2, i, fieldIndex, prowcount / 2, prowcount * 3 / 4);
Thread thread3 = new Thread(t3.xunhuan);
objclass t4 = new objclass(pRow, pRow2, pCursor, pCursor2, i, fieldIndex, prowcount * 3 / 4, prowcount);
Thread thread4 = new Thread(t4.xunhuan);
thread1.Start();
thread1.Join();
thread2.Start();
thread2.Join();
thread3.Start();
thread3.Join();
thread4.Start();
thread4.Join();
上面是我自己写的,,在此基础上怎么改。。今天刚刚学的多线程。。很多都不懂。能给出代码最好。。谢谢 展开
Thread thread1 = new Thread(t1.xunhuan);
objclass t2 = new objclass(pRow, pRow2, pCursor, pCursor2, i, fieldIndex, prowcount / 4, prowcount / 2);
Thread thread2 = new Thread(t2.xunhuan);
objclass t3 = new objclass(pRow, pRow2, pCursor, pCursor2, i, fieldIndex, prowcount / 2, prowcount * 3 / 4);
Thread thread3 = new Thread(t3.xunhuan);
objclass t4 = new objclass(pRow, pRow2, pCursor, pCursor2, i, fieldIndex, prowcount * 3 / 4, prowcount);
Thread thread4 = new Thread(t4.xunhuan);
thread1.Start();
thread1.Join();
thread2.Start();
thread2.Join();
thread3.Start();
thread3.Join();
thread4.Start();
thread4.Join();
上面是我自己写的,,在此基础上怎么改。。今天刚刚学的多线程。。很多都不懂。能给出代码最好。。谢谢 展开
1个回答
展开全部
首先子线程必须由主线程启动,所以严格意义上的“子线程结束后再执行主线程”是不可能实现,你的意思应该是:主线程创建完子线程后,等待子线程退出,在继续执行。
你的代码基本没有多大问题,只是 Join 方法位置放置不对。
thread1.Start(); // 先启动所有子线程
thread2.Start();
thread3.Start();
thread4.Start();
thread5.Start();
thread1.Join(); // 然后在等待子线程退出
thread2.Join();
thread3.Join();
thread4.Join();
thread5.Join();
你先前的代码:
thread1.Start(); // 线程1 启动
thread1.Join(); // 等待 线程1 退出,线程1 未退出前,后面代码无法执行
thread2.Start(); // 以下代码,均同上所述。
thread2.Join();
thread3.Start();
thread3.Join();
thread4.Start();
thread4.Join();
你的代码基本没有多大问题,只是 Join 方法位置放置不对。
thread1.Start(); // 先启动所有子线程
thread2.Start();
thread3.Start();
thread4.Start();
thread5.Start();
thread1.Join(); // 然后在等待子线程退出
thread2.Join();
thread3.Join();
thread4.Join();
thread5.Join();
你先前的代码:
thread1.Start(); // 线程1 启动
thread1.Join(); // 等待 线程1 退出,线程1 未退出前,后面代码无法执行
thread2.Start(); // 以下代码,均同上所述。
thread2.Join();
thread3.Start();
thread3.Join();
thread4.Start();
thread4.Join();
追问
按照你那个方法我已经试过了,,你说的也有道理。。现在我有一个新的问题:我上面的程序是对同一个表进行处理,就是把一个表分成几个相等大小部分,分别对其进行字段的添加。。。
有人说不能同时对一个文件用多线程修改。。是这样吗?有没有什么解决方法。。上面方法我得出来的结果,有部分是错误的。。
追答
“不能同时对一个文件用多线程修改”这句话本身是不正确,通常多线程同时修改一个文件会带来混乱情形而造成运行时逻辑错误,所以应当避免多跟线程同时修改数据。
要避免多线程同时修改数据,这涉及到“线程安全”或者说“线程同步”的知识点,不是一句话能说清楚,建议学习编写“多读一写”的经典多线程程序,即:
1)同时允许多根线程读取数据,在读取没有完成之前,阻止写入线程写入。
2)只允许一根线程写入数据,写入未完成前,禁止其他线程读取数据
MSDN 上有此示例源代码,自己在 MSDN 搜一下。
涉及知识点:互斥体、临界点、事件信号
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询