
线程
乐百川
这个作者很懒,什么都没留下…
展开
-
C#学习笔记 异步操作
同步操作默认情况下我们的代码都是同步操作。这种情况下,所有的操作都在同一个线程中,如果遇到需要长时间执行的操作或者是一个IO操作,那么代码可能会阻塞比较长的时间。在阻塞的这段时间里,无法进行其他工作,这是很不好的。这里是一个同步操作的例子。一个操作需要大约5秒时间,然后另一个操作好过去前一个操作的结果并显示。在这5秒钟时间里,线程会被阻塞,无法进行任何工作。private static string原创 2016-01-09 23:29:39 · 994 阅读 · 0 评论 -
C#学习笔记 任务操作
利用线程,可以方便地进行异步操作。但是线程模型有一个缺点,就是无法处理返回值。要在不同线程之间传递数据比较麻烦。任务则解决了这个问题。创建并执行任务有返回值和没有返回值的任务要创建一个没有返回值的任务,只需要向Task类的构造函数传递一个参数列表和返回值都为空的委托(也就是Action委托)即可。构造好一个Task之后,就可以调用Start方法开始执行任务,就像Thread上调用Start一样。这样原创 2016-01-06 23:21:44 · 1244 阅读 · 0 评论 -
C#学习笔记 线程操作
线程基本操作完整代码在这里:https://github.com/techstay/csharp-learning-note 。创建并使用线程使用线程执行任务要创建一个线程很简单,实例化一个System.Threading.Thread对象并向其构造函数传递一个无参无返回值的委托即可。创建完线程之后,线程并没有实际运行。要让其运行,需要调用其Start方法,这样会将其状态修改为就绪,可以随时被CPU原创 2015-12-25 22:14:07 · 535 阅读 · 0 评论 -
C#学习笔记 线程同步
多个线程同时操作一个数据的话,可能会发生数据的错误。这个时候就需要进行线程同步了。用户模式同步构造易变构造CLR保证4字节以下的基本类型的读写是原子性的,也就是说这些变量的值都会一次性被读取或者写入。但是64位的值比如Int64和Double,就不是原子读写的了。这样的变量在机器级别上,可能需要两次读写才能完成。另外由于编译器的优化,一些变量的读写顺序可能和实际执行的顺序不同。这会导致一些在单线程下原创 2016-01-10 23:31:52 · 871 阅读 · 0 评论 -
C#学习笔记 线程同步问题
这是用C#提供的各种类实现的几个线程同步问题。生产者消费者问题生产者消费者问题大体是这样的:有几个生产者和几个消费者,共享一个缓冲区。生产者会向缓冲区中添加数据;消费者会从缓冲区中将数据取走。需要处理这两者之间的同步问题。这里先定义一个自己的线程安全队列。该队列使用两个信号量来处理同步问题。另外在进行操作的时候需要锁定临界区,这里使用lock语句实现。public class FixedQueue<原创 2016-03-21 22:29:14 · 551 阅读 · 0 评论