勇哥注:《多线程安全》这个系列会持续写下去,它是我的一个弱点,有兴趣的朋友可以选择性看看。先看源码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
us
勇哥注:《多线程安全》这个系列会持续写下去,它是我的一个弱点,有兴趣的朋友可以选择性看看。下面源码运行后会发生死锁。源码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using Syste
一、栈和堆是什么程序运行时,它的数据必须存储在内存中。一个数据项需要多大的内存、存储在什么地方、以及如何存储都依赖于该数据项的类型。运行中的程序使用两个内存区域来存储数据:栈和堆。1、栈栈是一个内存数组,是一个LIFO(last-in first-out,后进先出)的数据结构。栈存储几种类型的数据:某些类型变量的值、程序当前的执行环境、传递给方法的参数。栈的特点:(1)数据只能从栈的顶端插入和删除。(2)把数据放到栈顶称为入栈。(3)从栈顶删除数据称为出栈。2、堆堆是一块内存区域,在堆里可以分配
引用类型如:string,Object,class等总是在从托管堆上分配的,C#中new操作符返回对象的内存地址--也就是指向对象数据的内存地址。以下是值类型与引用类型的表: 我们来看下面一段代码:首先在类中声明一个class类,和一个struct结构,如图:并使用在程序入口调用它们,如图: 现在我们来看一看,它们在内存当中是如何存储的? 从这张图可以看出,class(类)实例化出来的对象,指向了内存堆中分配的空间struct(结构) 实例化出
勇哥注:《多线程安全》这个系列会持续写下去,它是我的一个弱点,有兴趣的朋友可以选择性看看。上节说到lock锁关键字,它实际上是Monitor的语法糖。lock锁定的是一个内存地址的引用。lock必须锁定一个引用类型的变量。锁定的变量msdn推荐是下面这样的:private static readonly object lockobj = new object();这里为什么必须这样是有玄机的。我们来依次看几个例子。(一)锁定nullnull在定义的时候当引用类型,执行的时候会报错误。这里需要注意
作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题,解决临界资源的访问通常是加锁或者是使用信号量,这个大家应该很熟悉了。 而集合作为一种重要的临界资源,通用性更广,为了让大家更安全的使用它们,微软为我们带来了强大的并行集合:System.Collections.Concurrent里面的各位仁兄们。 首先,咱们从一个经典的问题谈起。生产者消费者问题 这个问题是最为经典的多线程应用问题,简单的表述这个问题就是:有一个或多个线程(生产者线程)产生一些数据,同时,还有一个或者多个线程(
勇哥注:《多线程安全》这个系列会持续写下去,它是我的一个弱点,有兴趣的朋友可以选择性看看。程序如下: private void button1_Click(object sender, EventArgs e)
{
&n
勇哥注:《多线程安全》这个系列会持续写下去,它是我的一个弱点,有兴趣的朋友可以选择性看看。运行源码后,执行button1 for (int i = 0; i < 5; i++)
{
&
勇哥注:关注这个话题是因为看到C#的关键字 lock时,其传入引用对象。因为string也是引用对象,所以能否做为lock的参数?对于这个问题,要搞明白C#的字符串的一个特点,它使用类似于享元模式的机制。因此在lock中锁字符串是相当不安全的。下面贴子是对C#字符串与享元模式的深入讨论。写这个文章,主要是因为网上对C#字符串和享元模式的误解比较多。Flyweight模式先说这名字,fly呢,就是苍蝇,没错这里面不是飞的意思,是苍蝇的意思,weight大家都知道,就是重量,苍蝇的重量,就是非常非常
勇哥手里一个无刷电机,采用485的modelbus crc16协议来控制。因此需要一个计算校验和的工具。源码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text