今天的面食题,关于多线程的 无论线程如何跑,反正i总是被+500次,-500次所以说是线程嘛 不是说等两个线程都结束了才 Console.WriteLineWrite时i还没有被执行任何操作 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 using System;using System.Threading;namespace C{ class GGG{ static int i; static void Main(){ Thread t1=new Thread(new ThreadStart(C.GGG.HH)); Thread t2=new Thread(new ThreadStart(GGG.Dd)); t1.Start(); t2.Start(); Console.WriteLine(i);} public static void HH(){ for(int j=0;j<1000;j++){ if(j%2==0) i++;}} public static void Dd(){ for(int k=0;k<1000;k++){ if(k%2==0) i--;}}}} 不管下面两个线程的执行函数怎么写都应该输出i的初始值-也就是0,因为Console.Write(i)的时候线程刚刚启动,线程基本来没有得到运行的时间,主线程就打印出i了 不要猜想,运行一下试一试。这里面的时间太短了,两个线程还没有轮到时间片,主线程就已经打印出结果了,所以肯定是0。public static void HH(){ for(int j=0;j<1000;j++) { if(j%2==0) i++; Console.WriteLine(i); }}public static void Dd(){ for(int k=0;k<1000;k++) { if(k%2==0) i--; Console.WriteLine(i); }}输出的第一个数字肯定还是0,因为这是主线程输出的。以后的数字就不一定了,因为两个线程一直在争用i,所以输出不一定。 怎么不搞点儿线程池,线程安全性之类的.ManualResertEvent(),waitont(),syncLock, mutex 排列的问题 listbox选择触发选项 大侠们我有个关于套接字编程的问题 C#。net调试的时候常用的那个窗口是什么来着?被我关掉了,从哪里打开? dataset中fill方法报错-数组索引超出限界 ----急,在线等 求RGB和CMYK的互相转换组件 关于WPF中Form间传递数据的问题 滚动条问题 插入一条记录能否返回记录号 小菜提问:C#中如何把文本型转换为Decimal 型? 我的datagrid怎么没有滚动条啊??? 資源釋放的問題
using System.Threading;
namespace C
{
class GGG
{
static int i; static void Main()
{
Thread t1=new Thread(new ThreadStart(C.GGG.HH));
Thread t2=new Thread(new ThreadStart(GGG.Dd));
t1.Start();
t2.Start();
Console.WriteLine(i);}
public static void HH()
{
for(int j=0;j<1000;j++)
{
if(j%2==0)
i++;
}
}
public static void Dd()
{
for(int k=0;k<1000;k++)
{
if(k%2==0)
i--;
}
}}}
{
for(int j=0;j<1000;j++)
{
if(j%2==0)
i++;
Console.WriteLine(i);
}
}public static void Dd()
{
for(int k=0;k<1000;k++)
{
if(k%2==0)
i--;
Console.WriteLine(i);
}
}输出的第一个数字肯定还是0,因为这是主线程输出的。
以后的数字就不一定了,因为两个线程一直在争用i,所以输出不一定。