摘要:
之前的博客 将时间作为GUID的方法 中,我使用了锁。我在实际的使用中,错将锁的释放放在了if语句中,这纯粹是我的失误,导致了很严重的错误。因此我在想是否有无锁的将时间作为GUID的方式,答案是使用Interlocked中的 CompareExchange方法,该方法是原子操作。说是无锁操作,其实就 阅读全文
摘要:
在C#中,系统提供了GUID类,用户可以通过该类来获得128位的唯一标识,但是该标识不具有可读性,很难把该GUID显示在界面上,以当前时间精确到毫秒来作为GUID是一个比较不错的做法,但是DateTime.now的误差是100ms左右,无法在毫秒级的并发情况下获得不同的时间。 在项目中,为了在界面上 阅读全文
摘要:
我认为,软件开发,尤其是定制化的软件开发,一定要彻底弄清楚客户对软件的初衷。客户很多时候对软件没有什么确切的概念,会提出不合理的需求。你可以根据客户的初衷来分辨哪些功能是客户真正所需,哪些是客户的一厢情愿。如果是‘真正所需’,即使是再困难也应该实现,如果是‘一厢情愿’,应该尽量避免,多和客户沟通。因 阅读全文
摘要:
最近,项目中开始使用敏捷的方式开发。我没有研究过敏捷,对敏捷的认识全是来自项目。项目中,敏捷的基本做法就是对项目中的任务进行拆分,开发者根据拆分中分配到自己身上的任务,进行开发。其目的是保证项目能够按照预计要求的时间,按时交付。任务的拆分和时间的规划是非常重要的,因此每次迭代前,都会开会,来对需求进 阅读全文
摘要:
内存泄漏是指:当一块内存被分配后,被丢弃,没有任何实例指针指向这块内存, 并且这块内存不会被GC视为垃圾进行回收。这块内存会一直存在,直到程序退出。C#是托管型代码,其内存的分配和释放都是由CLR负责,当一块内存没有任何实例引用时,GC会负责将其回收。既然没有任何实例引用的内存会被GC回收,那么内存 阅读全文
摘要:
如果有人和你说,如果不将字符串转换为数字,你要如何判断字符串是否由全数字组成?把字符串拆成char数组,然后放入一个循环,来判断每个char是否为数字?那你要如何判断手机号是否合法?IP是否合法呢?把字符串拆成char数组总不是个办法啊,是否有更好的解决办法?有的,正则表达式就是。正则表达式是什么? 阅读全文
摘要:
一提到线程同步,就会提到锁,作为线程同步的手段之一,锁总是饱受质疑。一方面锁的使用很简单,只要在代码不想被重入的地方(多个线程同时执行的地方)加上锁,就可以保证无论何时,该段代码最多有一个线程在执行;另一方面,锁又不像它看起来那样简单,锁会造成很多问题:性能下降、死锁等。使用volatile关键字或 阅读全文
摘要:
这篇文章主要给您讲解几个基本问题,什么是线程?为什么要用线程?线程万能?这几个问题。我这篇博客是在该系列另外几篇博客之后写的,之所以不往下继续写,而是回到最初的问题,是因为我感觉到我没有很好的讲解开头的部分,没有很好的介绍线程的基础知识,因此有了写这篇博客的想法。本文不会一五一十的介绍线程,那是百度 阅读全文
摘要:
在线程安全1中,我介绍了线程同步的意义和一种实现线程同步的方法:volatile。volatile关键字属于原子操作的一种,若对一个关键字使用volatile,很多时候会显得很“浪费”,因为只有在并发访问的情况下才需要“易变”读写,单线程访问时并不需要。在命名空间System.Threading命名 阅读全文
摘要:
当你需要2个线程读写同一个数据时,就需要数据同步。线程同步的办法有:(1)原子操作;(2)锁。原子操作能够保证该操作在CPU内核中不会被“拆分”,锁能够保证只有一个线程访问该数据,其他线程在尝试获得有锁的数据时,会被拒绝,直到当前获得数据的线程将锁释放,其他线程才能够获得数据。 为什么要线程同步? 阅读全文