关于多线程的问题

liuqian0415 2006-11-24 10:30:36
在我们的写的程序中,在没加入Thread类的时候,是不是还有线程呢?
public void Method()
{
for(int t=0; t< 10);t++)
{
Thread thread = new Thread(new ThreadStart(Sort));
thread.Name = Convert.ToString(t);
thread.Start();
}

}

public void Sort()
{
try
{
while(true)
{
swaped = false;
for (int j = 0; j<valueArray.Length-1; j++)
{
lock(typeof(Thread))
{ /* If the left-hand side value is greater swap values*/
if(valueArray[j] > valueArray[j+1])
{
int T = valueArray[j];
valueArray[j] = valueArray[j+1];
valueArray[j+1] = T;
swaped = true;
}
}
}
Thread.Sleep(1);
if(!swaped) { break; }
}
Thread.CurrentThread.Abort();
}
catch(Exception ex)
{
if( Interlocked.Increment(ref threadCounter) == Convert.ToInt64(ddlThreadNum.SelectedItem.Text.ToString().Trim()))
Display();
}
}

上边代码我同时启动了10个线程,启动了10个线程排序的速度比启动一个线程的排序速度快了,但是我想知道,当我启动了10个线程的时候,在一个时间段内只有一个线程在执行排序,等它排序结束后,这个时候排序工作已经结束了,别的线程执行的时候还有什么意义呢,因为排序工作结束了啊,它再排序就没有用了啊?
...全文
185 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LQP039 2006-11-27
  • 打赏
  • 举报
回复
你的排序算法采用的是冒泡的方式,for选还结束表示已经执行完了一次冒泡,此时实现了最大的数移到了数组的最后一位,此时由于Thread.Sleep(1),当前线程被挂起,其他任务(很有可能是另一个排序的线程,假定为线程2)将被激活,此时线程2开始执行,并进入执行for循环,则将又执行一次冒泡,当for循环结束时,数组中的次最大值将肯定被移到数组最后位的前一位了,然后Thread.Sleep(1),线程2又被挂起,然后又有新的线程继续执行一次冒泡的过程,,如此循环。
woyaomoney 2006-11-25
  • 打赏
  • 举报
回复
每个进程都有至少一个线程,没有线程,进程也就结束了
liuqian0415 2006-11-25
  • 打赏
  • 举报
回复
还是不明白a
llyzcy 2006-11-25
  • 打赏
  • 举报
回复
没线程怎么运行啊
terry52 2006-11-24
  • 打赏
  • 举报
回复
在我们的写的程序中,在没加入Thread类的时候,是不是还有线程呢?
------------------
有主线程
wthorse 2006-11-24
  • 打赏
  • 举报
回复
10个线程去做排序,得找个好方法啊。找不到方法还不如一个线程去执行
liuqian0415 2006-11-24
  • 打赏
  • 举报
回复
靠,没人回啊

110,534

社区成员

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

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

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