2021-10-17 09:27:15
请看演示程序。我们知道List.Find() 如果找到则返回这个对象,找不到返回这个类型的缺省值。下面例子中,你无法这样写: if(res1==null) { }因为结构体的缺少值不是null。演示程序:using System;
using System.Collections.Generic;
using System.Li...
2021-10-03 22:26:15
勇哥注:《多线程安全》这个系列会持续写下去,它是我的一个弱点,有兴趣的朋友可以选择性看看。内核模式锁有三种:事件锁AutoResetEvent,MuanualResetEventm,信号量Semaphore,互斥锁Mutex这三种锁,我们发现都有一个WaitOne方法。。。因为他们都是继承于WaitHandle。三种锁都是同根生,其实底层都是通过SafeWaitHandle来对win32api的一...
2021-10-03 21:14:44
勇哥注:《多线程安全》这个系列会持续写下去,它是我的一个弱点,有兴趣的朋友可以选择性看看。const string mutexName = "勇哥";public static Mutex mutexObj = new Mutex(false, mutexName); 定义了一个全局锁,false表示创建互斥锁之后持有状态是:没有人持有命名“勇哥”,将做为全局的操作系统互斥量...
2021-10-01 08:30:28
勇哥注:《多线程安全》这个系列会持续写下去,它是我的一个弱点,有兴趣的朋友可以选择性看看。在C#中,赋值和简单的数字运算都不是原子型操作。在多线程环境下,会产生数据安全的问题。Interlocked是“为多个线程共享的变量提供原子操作”,当然这个类是一个静态类。这个类的源代码看不到,因为是调用的CLR内部的方法,不过基本思想应该是通过硬件原语try and set来实现的。该类提供的Add、Inc...