随笔分类 - C#
摘要:同步 当多个线程共享一些数据的时候,我们就需要使用同步技术,确保一次只有一个线程访问合改变共享状态。注意,同步问题与争用和死锁有关。 例: static int idx = 0; static void Add() { for (int i = 0; i < 50000; i++) { idx++;
阅读全文
摘要:死锁 为了线程安全,我们在需要的是会使用”独占锁“,但过多的锁定也会有麻烦。多个线程因为竞争资源相互等待而造成的僵局,我们称为死锁。若无外力作用,这些进程将都无法推进。在死锁中,至少有两个线程被挂起,并等待对方解除锁定。 我们先看一个小例子:在一个平面上有很多方块,有一些星星在这上面移动。基本规则就
阅读全文
摘要:Parallel类 Parallel类定义了for、foreach和invoke的静态方法。Parallel类使用多个任务,因此使用多个线程来完成这个作业。 Parallel.For Parallel.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Parallel.For方法,
阅读全文
摘要:线程池 创建线程需要时间,如果有不同的小任务要完成,就可以事先创建许多线程,在应完成这些任务时发出请求。这个线程数最好在需要更多线程时增加,在需要释放资源时减少。 不需要自己创建这样的一个列表。该列表由ThreadPool类托管。该类会在需要时增加线程池中线程数,直到最大的线程数。 可以指定创建线程
阅读全文
摘要:传递数据给一个线程 通过函数或lambda表达式包一层进行传递。 另外一种方式是传递一个参数给Thread的Start方法: 注意传递的数据的可靠性。 命名线程 线程的Name属性,用于获取或设置线程的名称。包含线程名称的字符串,或者如果未设置名称,则为 null。Name属性设置后将无法修改,尝试
阅读全文
摘要:线程是怎样工作的 1.多线程由一个线程调度器来进行内部管理,一个功能是CLR常常委托给操做系统。 一个线程调度器确保所有激活的线程在执行期间被合适的分配,等待或者阻塞的线程(比如,一个独占锁或者等待用户输入)不占用CPU资源。 2.在单核电脑上,一个线程调度器让时间片在每一个激活的线程中切换。在wi
阅读全文
摘要:标准的查询操作符 1、筛选 2、带索引筛选 3、类型筛选 4、复合的from语句 5、排序 6、分组 //data[a123,1], data[a123,2], data[a123,3] //data[a456,4], data[a456,6], data[a456,5] //data[789,3]
阅读全文
posted @ 2018-01-24 09:54
吴筱军
摘要:任务 任务表示应完成的某个单元的工作。这个单元的工作可以在单独的线程中运行,也可以以同步方式启动一个任务,这需要等待主调线程。使用任务不仅可以获得一个抽象层,还可以对底层线程进行很多控制。 在安排需要完成的工作时,任务提供了非常大的灵活性。 例如,可以定义连续的工作——在一个任务完成后该执行什么工作
阅读全文
posted @ 2018-01-24 09:53
吴筱军
摘要:常用 可以重复0次或1次的前导字符, 当该字符紧跟在其他限制符(*,+,?,{n},{n,},{n,m})后面时, 匹配模式尽可能少的匹配所搜索的字符串。 将匹配的子表达式捕获到一个命名组中 如 @"<(?<key>\w+)>\w+</\k<key>>"可匹配"<action>attack</act
阅读全文
posted @ 2017-11-28 16:49
吴筱军
摘要:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace practice { class _File { public static void Read() { ...
阅读全文
摘要:概述 线程是程序中独立的指令流。进程包含资源,如Window句柄、文件系统句柄或其他内核对象。每个进程都分配了虚拟内存。一个进程至少包含一个线程。操作系统会调用线程。线程有一个优先级、实际上正在处理的程序的位置计数器、一个存储其局部变量的栈。每个线程都有自己的栈,但程序代码的内存和堆由一个进程的所有
阅读全文
摘要:命名空间下的类型可以为:Class、interface、delegate、struct、enum,不可以直接写变量和方法。 除了一下差异,C#中的变量几乎和C++中一样: 1、C#中的变量,总是需要你在访问前进行初始化,否则编译出错。 2、不能在C#中访问一个“挂起”指针。 3、超出数组边界的表达式
阅读全文
摘要:在C#中,数组实际上是对象,而不只是像C和C++中那样的可寻址连续内存区域 数组常用属性 Array.Rank 维数 Array.Length 所有维度总个数 Array.GetLength(int dimension)指定维度元素个数 Array.GetLowerBound(int dimensi
阅读全文
摘要:扩展方法就是为一个现有类型添加一个方法,现有类型既可以是int,string等数据类型,也可以是自定义的数据类型。
阅读全文
摘要:委托(delegate) 访问修饰符 delegate 返回值类型 委托名 (参数列表) 委托是一种可以把引用存储为函数的类型,也就是说它声明了一种用于保存特定格式函数的数据类型,如图C++中的函数指针。 1.匿名委托 委托类型 实例化名 = delegate(参数列表){函数体} 2.泛型委托 d
阅读全文
摘要:属性它是一个方法或一对方法,在客户端代码看来,它是一个字段。 属性可以拥有get、set访问器,get访问器不带任何参数,必须返回属性声明的类型。也不应该为set访问器指定任何显式参数, 但编译器假定它带一个属性所声明的类型的参数,表示为value。例如: 1、只读、只写属性 在属性定义中省略set
阅读全文

浙公网安备 33010602011771号