博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET线程的同步和通讯
阅读量:6618 次
发布时间:2019-06-25

本文共 765 字,大约阅读时间需要 2 分钟。

  hot3.png

1、每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。

2、C#提供了一个关键字lock,它可以把一段代码定义为互斥段,互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。

lock(expression) statement_block。expression代表你希望跟踪的对象,通常是对象引用。如果你想要保护一个类的实例,你可以使用this。如果你希望保护一个静态变量。一般使用类名就可以了。statement_block就是互斥段的代码,这段代码在一个时刻内只可能被一个线程执行。

3、多线程公用一个对象时,System.Threading中的一个类Monitor,我们可以称之为监视器,Monitor提供了使线程共享资源的方案。

4、Monitor类可以锁定一个对象,一个线程只有得到这把锁才可以对该对象进行操作。对象锁机制保证了在可能引起混乱的情况下一个时刻只有一个线程可以访问这个对象。

5、Monitor必须和一个具体的对象相关联,但是有于它是一个静态的类,索引不能使用它来定义对象,而且它所有的方法都是静态的,不能使用对象来引用。

6、当一个线程调用Monitor.Enter()方法锁定一个对象时,这个对象就归它所有了,其他线程想要访问这个对象,只有等待它使用Monitor.exit()方法来释放锁。

7、当拥有对象锁的线程准备释放锁时,它使用Monitor.Pulse()方法通知等待队列中的第一个线程,于是。该线程被转移到预备队列中,当对象锁被释放时,在预备队列中的线程可以立即获得对象锁。

8、Monitor.Wait()方法释放对象上的锁并阻塞当前线程,直到它重新获取该锁。

 

转载于:https://my.oschina.net/loveyj/blog/202882

你可能感兴趣的文章
编写一个基本的Android应用程序
查看>>
我的友情链接
查看>>
查看Linux操作系统安装的位数(getconf 命令应用)
查看>>
ifstream读取文件失败和乱码问题
查看>>
Python信息采集器使用轻量级关系型数据库SQLite
查看>>
zookeeper中的exception的问题
查看>>
final+基本类型导致只编译常量类引起的错误
查看>>
分库分表的几种常见玩法及如何解决跨库查询等问题
查看>>
把GPS经纬度放入两个字符串,写入文件
查看>>
Java操作MongoDB实现CRUD
查看>>
给js文件传参数
查看>>
tomcat web.xml启动加载类
查看>>
Linux 配置SSH信任
查看>>
【九度OJ1352】|【剑指offer41】和为S的两个数字
查看>>
《android-文件大小》
查看>>
HTTPS的工作原理
查看>>
PhoneGap使用PushPlugin插件实现消息推送
查看>>
Boyer-Moore 算法介绍
查看>>
关于Java中的单例模式
查看>>
datepicker
查看>>