C# 锁定参数并将其传递给多线程代码
我想按如下方式使用多线程程序,但当我运行该程序时,R1、R2和R3是不同的C# 锁定参数并将其传递给多线程代码,c#,multithreading,locking,C#,Multithreading,Locking,我想按如下方式使用多线程程序,但当我运行该程序时,R1、R2和R3是不同的 using System; using System.Threading; using System.Threading.Tasks; namespace ParallelFor { class Program { static void Main() { Console.WriteLine("Program started"); do
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ParallelFor
{
class Program
{
static void Main()
{
Console.WriteLine("Program started");
double R1 = 0.0;
double R2 = 0.0;
double R3 = 0.0;
var t1 = new Thread(() => TestCounter(1000, ref R1, 1));
var t2 = new Thread(() => TestCounter(1000, ref R2, 2));
var t3 = new Thread(() => TestCounter(1000, ref R3, 3));
t1.Start();
t2.Start();
t3.Start();
do
{
Thread.Sleep(1000);
Console.WriteLine("waiting...");
} while (t1.IsAlive == true && t2.IsAlive == true && t3.IsAlive == true);
Console.WriteLine("inside R1: {0}", R1);
Console.WriteLine("inside R2: {0}", R2);
Console.WriteLine("inside R3: {0}", R3);
Console.WriteLine("Program finished");
Console.ReadLine();
}
static void TestCounter(int counter, ref double result, int No)
{
for (int i = 0; i < counter + 1; i++)
for (int j = 0; j < counter; j++)
for (int k = 0; k < counter; k++)
result += (double)i;
}
}
}
使用系统;
使用系统线程;
使用System.Threading.Tasks;
命名空间并行
{
班级计划
{
静态void Main()
{
Console.WriteLine(“程序已启动”);
双R1=0.0;
双R2=0.0;
双R3=0.0;
var t1=新线程(()=>TestCounter(1000,ref R1,1));
var t2=新线程(()=>TestCounter(1000,ref R2,2));
var t3=新线程(()=>TestCounter(1000,参考R3,3));
t1.Start();
t2.Start();
t3.Start();
做
{
睡眠(1000);
控制台。WriteLine(“等待…”);
}而(t1.IsAlive==true&&t2.IsAlive==true&&t3.IsAlive==true);
WriteLine(“内部R1:{0}”,R1);
WriteLine(“内部R2:{0}”,R2);
WriteLine(“内部R3:{0}”,R3);
Console.WriteLine(“程序完成”);
Console.ReadLine();
}
静态void测试计数器(int计数器,ref-double结果,int-No)
{
对于(int i=0;i
您的do
循环在第一个线程准备就绪后立即完成
我想你想要
while ( t1.IsAlive || t2.IsAlive || t3.IsAlive );
这将保持
do
循环,直到所有测试都准备就绪。为什么不简化并使用一个for-loop?还有,如果它们不一样,你会得到什么值?最后一件事-布尔值不需要==true
。@Mahdy是否应该等待线程加入?如果检查线程是否处于活动状态,则不需要加入线程。@WaiHaLee加入比忙碌等待更可取。应该这样做。@WaiHaLee我会从上到下重新设计整个应用程序,但是是的,这将是朝着正确方向迈出的一步。