怎样让多条线程顺序执行???

bryht 2010-08-16 10:49:10
for (int i = 0; i < 10; i++)
{
new Thread(
delegate()
{
//MyCode;
}
).Start();

}
//怎么让循环中的线程按照I的顺序先后执行,是用Lock锁吗?
//应该怎么锁,请大侠指点
...全文
593 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Suriyel 2012-03-15
  • 打赏
  • 举报
回复
死锁
[Quote=引用 20 楼 chopper7278 的回复:]
thread.Join()
一旦线程启动,就可以通过调用thread.Join()来造成一个“等待完成”(wait for completion)情形。调用线程会一直等待,直到thread实例终止。
[/Quote]
bryht 2010-08-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 guoyichao 的回复:]
Task t = null;
for (int i = 0; i < 10; i++)
{
Action a = delegate()
{
//MyCode;
};

if (t != null)
t = t.ContinueWith(a);
else
t = Task.Factory.StartNew(a);
}
[/Quote]
您那个Task是个什么?
dodducs 2010-08-18
  • 打赏
  • 举报
回复
Thread t =new Thread(
delegate()
{
//MyCode;
}
).Start();

改成这样 然后加一句
t.Join();
就可以了但是如果是这样 那你为什么不做一个方法呢? 让那个方法循环执行 线程里的方法?
搞那么多线程看的都麻烦
malun666 2010-08-16
  • 打赏
  • 举报
回复
其实最基本的线程的通信,为所有线程提供一个公共的信号量,都去检查那个信号量到自己的编号了就执行就可以了,执行完毕,改变信号量就可以了。就可以达到线性的效果了。
guoyichao 2010-08-16
  • 打赏
  • 举报
回复
Task t = null;
for (int i = 0; i < 10; i++)
{
Action a = delegate()
{
//MyCode;
};

if (t != null)
t = t.ContinueWith(a);
else
t = Task.Factory.StartNew(a);
}
liyoubaidu 2010-08-16
  • 打赏
  • 举报
回复
给你一个很少人用的方法:用socket。
dancingbit 2010-08-16
  • 打赏
  • 举报
回复
这样做的话,多线程也没有了任何意义,反而要为线程创建、调度和销毁浪费资源。
兔子-顾问 2010-08-16
  • 打赏
  • 举报
回复
以上写的例子用到匿名方法、lambda、线程同步的简化写法。你仔细看应该就问题解决了。
兔子-顾问 2010-08-16
  • 打赏
  • 举报
回复
static void Main(string[] args)
{
int order = 0;//, -1 for exit , 0 for initialize
int ordermax = 0;//最大编号
ParameterizedThreadStart threadProc = p =>
{
if (!(p is int)) return;
int myOrder = (int)p;
object sync = new object();
while (true)
{
lock (sync)//同步线程
{
if (order != myOrder)//判断状态机当前状态是否是到自己执行
{
Thread.Sleep(50);//阻塞自己线程50毫秒后继续下一次检测
continue;
}
Console.WriteLine(p);//实际操作
order++;//在lock块中,安全的操作状态
if (order > ordermax) order = 1;//循环状态
}
Thread.Sleep(50);
}
};
new Thread(threadProc).Start(1);//启动1个线程,编号1
new Thread(threadProc).Start(2);//启动1个线程,编号2
new Thread(threadProc).Start(3);//启动1个线程,编号3
new Thread(threadProc).Start(4);//启动1个线程,编号4
ordermax = 4;//最大值4
order = 1;//当前状态1,开始启动
Console.ReadKey();
}
husanbo110 2010-08-16
  • 打赏
  • 举报
回复
如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类。 我们可以把Mutex看作一个出租车,乘客看作线程。乘客首先等车,然后上车,最后下车。当一个乘客在车上时,其他乘客就只有等他下车以后才可以上车。而线程与Mutex对象的关系也正是如此,线程使用Mutex.WaitOne()方法等待Mutex对象被释放,如果它等待的Mutex对象被释放了,它就自动拥有这个对象,直到它调用Mutex.ReleaseMutex()方法释放这个对象,而在此期间,其他想要获取这个Mutex对象的线程都只有等待
husanbo110 2010-08-16
  • 打赏
  • 举报
回复
加控制量设
第一个线程控制 k=1
第二个线程当 k =1时执行

貌似C# 中有这样的方法 能直接用的!
ztenv 2010-08-16
  • 打赏
  • 举报
回复
同步通知吧,其实你无须关心线程的执行顺序:你开启N个线程,然后等待直到这个N个线程执行完成,再取得结果就行了;

如果是在线程的执行代码中顺序的执行,也是失去了线程的意义了,还不如把这N个线程合并为一个线程(后台线程),这样代码会很简洁;
chichenzhe 2010-08-16
  • 打赏
  • 举报
回复
跟 互斥有个鸟关系.....
chichenzhe 2010-08-16
  • 打赏
  • 举报
回复
简单啊,

线程1... 线程10

线程1执行完了给线程2执行 线程2.start
以此类推 不就行了吗
bryht 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]
是,加互斥
[/Quote]
大侠能解释的详细点吗?这四个字我真猜不透是什么意思
bryht 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 snowdust 的回复:]
顺序执行还搞什么多线程啊?
[/Quote]
是因为多线程是固定的条件,我想把这10条线程顺序执行
bryht 2010-08-16
  • 打赏
  • 举报
回复
顺序即:我的10个 //MyCode;
一个一个顺序的执行
cactus123456 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 snowdust 的回复:]
顺序执行还搞什么多线程啊?
[/Quote]
严重同意1楼的解答
bdmh 2010-08-16
  • 打赏
  • 举报
回复
是,加互斥
porschev 2010-08-16
  • 打赏
  • 举报
回复
不明白你的顺序是什么意思。。。。
加载更多回复(4)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧