当前位置:编程学习 > C#/ASP.NET >>

C#多线程循环输出

刚刚学C#线程处理  又是自学 比较吃了希望大家能帮我搞定这个问题

using System;
using System.Collections.Generic;
using System.Threading;


namespace mutexlearning
{
    class Program
    {
        private const int count = 10;    \\创建5个线程
        static Mutex mutexconslo = new Mutex();
        static void Main(string[] args)
        {
            for (int i = 0; i < countt; i++)
            {
                Thread mythread = new Thread(run);
                mythread.Name = string.Format("{0}", i);
                mythread.Start();
            }
        }
        private static void run()
        {
            mutexconslo.WaitOne();
            for (int j = 0; j < 50; j++)
            {
                Console.WriteLine("线程{0}正在运行{1}", Thread.CurrentThread.Name, j);
                Console.WriteLine("线程{0}已经停止", Thread.CurrentThread.Name);
  mutexconslo.ReleaseMutex();
            }
        }
    }
}

这个是看了MSDN的那个MUTEX  类模仿出来的

他现在的结果是创建10个线程  每个线程输出50次

但是我想要的结果是创建10个并发线程结果应该是:

线程1输出:0

线程2输出:2

线程3输出:3

线程4输出:4

线程5输出:5

线程6输出:6

线程7输出:7

线程8输出:8

线程9输出:9

线程10输出:10

线程1输出:11

线程2输出:12

 

以此类推  总之意思就是 不同的线程 输出不同的数  随便那个线程输出的都行

 就是0-49  但是不能重复  说白了就是10个线程  输出0-49 

追问:额 麻烦给个例子好吗? 多看几个例子应该就会了  

   刚刚学的都不知道怎么回事百度一下又找不到什么例子

答案:用一个Monitor锁定就OK了,下面是完整代码,你可以直接复制过去运行的class Program    {        private event EventHandler OnNumberClear;        public List<Thread> ThreadCollection = new List<Thread>();        public int count = 0;        private void run()        {            while (true)            {                Monitor.Enter(this);//锁定,保持同步                Console.WriteLine("线程{0}正在运行{1}", Thread.CurrentThread.Name, count);                if (count == 50)                {                    OnNumberClear(this, new EventArgs());//引发完成事件                }                count += 1;                Monitor.Exit(this);//取消锁定                Thread.Sleep(5);            }
        }        public Program()        {            for (int i = 0; i < 10; i++)            {                Thread mythread = new Thread(run);                mythread.Name = string.Format("{0}", i);                ThreadCollection.Add(mythread);            }            OnNumberClear += new EventHandler(Program_OnNumberClear);
        }
        void Program_OnNumberClear(object sender, EventArgs e)        {            Console.WriteLine("执行完了,停止了所有线程的执行。");            foreach (Thread thread in ThreadCollection)            {                thread.Abort();            }        }        public void Action()        {            foreach (Thread thread in ThreadCollection)            {                thread.Start();            }        }        static void Main(string[] args)        {            Program program = new Program();            program.Action();        }    }

run方法加同步锁。

上一个:c# 数据绑定 值成员
下一个:C#登陆系统问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,