求神先给个多线程的实例

g_strive 2016-09-16 12:49:48
昨天发帖子问了一下多线程的问题感觉明白了一点,可是在自己写的时候感觉怎么写都在单线程这里转悠,没有办法写出能同时输出的多线程求各位神仙给个多线程的实例参考下,最后问一句线程池是多个线程放在一个集合里面吗?
...全文
223 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bb_Sam 2016-09-19
  • 打赏
  • 举报
回复
多线程相关知识及例子可以去看看 Joe Albahari 的 Threading in C# 中文翻译可以参考 C# 中的多线程
大鱼> 2016-09-19
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/qq_17486399/9499214
g_strive 2016-09-19
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
这只是举例,一个任务应该不应该多线程访问,你会用自己的测试来说明。有时候代码不改变,但是处理的数据改变了,也会在多线程和单线程中有不同的选择。 技术上是这样的“并发”概念,但是技术不如现实更重要。
因为现在刚刚从学校出来感觉有很多需要学习,所以想把基础打的好一点,可能是有的时候太较真了,
showjim 2016-09-17
  • 打赏
  • 举报
回复
引用 5 楼 hiose89 的回复:
那JS里 怎么同时alert 2个消息框~~~~
JS 只有串行,顶多只能模拟一个看起来像是并行的东西,就如单核 CPU 多任务处理。
threenewbee 2016-09-16
  • 打赏
  • 举报
回复
直接在google或者msdn上搜索system.threading.thread,就有
hiose89 2016-09-16
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
这只是举例,一个任务应该不应该多线程访问,你会用自己的测试来说明。有时候代码不改变,但是处理的数据改变了,也会在多线程和单线程中有不同的选择。 技术上是这样的“并发”概念,但是技术不如现实更重要。
那JS里 怎么同时alert 2个消息框~~~~
  • 打赏
  • 举报
回复
这只是举例,一个任务应该不应该多线程访问,你会用自己的测试来说明。有时候代码不改变,但是处理的数据改变了,也会在多线程和单线程中有不同的选择。 技术上是这样的“并发”概念,但是技术不如现实更重要。
  • 打赏
  • 举报
回复
引用 楼主 g_strive 的回复:
昨天发帖子问了一下多线程的问题感觉明白了一点,可是在自己写的时候感觉怎么写都在单线程这里转悠,没有办法写出能同时输出的多线程求各位神仙给个多线程的实例参考下,最后问一句线程池是多个线程放在一个集合里面吗?
我要强调一点,搞技术的人如果一直去纠结 know-what 会把脑袋学傻了。名词儿是死的,人是活的。一些人好像什么都知道但是不从 know-how 出发而去纠结 know-what,往往是“黑粉”。了解技术的人会去深入一点去理解线程集合如何重用、调度线程的问题,如果你不研究 know-how 就很容易被有些人、有些文章忽悠。
  • 打赏
  • 举报
回复
设计多线程的算法,首先可以使用 PLinq,然后在必要时(特别是程序特别简单时)才使用比较原始的古老写法。 给你写一个并发复制目录下的所有文件的demo:
using System;
using System.IO;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var source = "C:\\publish";         //这两个路径应该自己修改一下
            var target = "C:\\publish1";
            Copy(new DirectoryInfo(source), new DirectoryInfo(target));
            Console.WriteLine("................按任意键结束");
            Console.ReadKey();
        }

        private static bool Copy(DirectoryInfo source, DirectoryInfo target)
        {
            if (target.Exists)
                throw new IOException("target 已经存在。请删除目录,再开始测试。");

            target.Create();
            (from file in source.EnumerateFiles().AsParallel()
             let targetFile = Path.Combine(target.FullName, file.Name)
             select Copy(file, targetFile)).Count();
            (from dir in source.EnumerateDirectories().AsParallel()
             let targetPath = Path.Combine(target.FullName, dir.Name)
             let targetDir = new DirectoryInfo(targetPath)
             select Copy(dir, targetDir)).Count();
            return true;
        }

        private static bool Copy(FileInfo source, string target)
        {
            Console.WriteLine(target);
            source.CopyTo(target);
            return true;
        }
    }
}
这里,有 .AsParallel() 就是并发多线程的,不写它则就是顺序的。因此你可以迅速地在“多线程、单线程”中进行切换。 一个任务未必就应该使用多线程来实现,因此你应该掌握迅速改变程序设计的能力。
800字以内 2016-09-16
  • 打赏
  • 举报
回复
百度thread一大堆吧 都可用 线程池的线程不一定是一个集合,可视为一个集合。操作方便。有兴趣可以看看iocp池

111,128

社区成员

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

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

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