硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

C#中安全并行机制的唯一性和引用不可变性研究

  • 2012-12-20
  • 本文字数:1141 字

    阅读完需:约 4 分钟

近来,微软、微软研究院和华盛顿大学的不少知名人士正在对 C#中的新变量类型进行研究。该变量类型引入了语言级别上的可读性和不可变引用(immutable references)的概念。这意味着每种引用有四种权限的限定符,这些限定符会修改变量和参数。

C#中的普通引用是“可写(writable)”权限。这表示引用所指向的对象可以用普通的方法和属性设置进行修改。

下一种限定符是“可读(readable)”权限。可读引用是对象的一种只读视图。在这种权限下你还是可以修改对象,只是不能用特殊的引用方式进行修改。

如果任何一种引用都无法修改某对象,那么这种引用就称作为“不可变(immutable)”。不可变引用也被称作只读引用,不可变引用所指向的所有对象都是不可变的。

最后一种权限限定符叫做“隔离(isolated)”,表示“对外部唯一对象簇的外部引用”。这是个相对复杂的概念。想象一下,在某个图表中你有一些可变对象,你能够通过简单或复杂方法引用,但是你不能在图表之外直接引用这些对象。除非这个对象是根聚集,这是一种例外。研究中的图 1 也许能更清楚地表示这种限定符:

很多研究集中探讨了对象如何在这四种限定符之间进行转换。这个概念在创建复杂、不可变的对象图表中至关重要。在传统的功能性编程语言当中,程序自下而上地创建不可变对象图表。由于对开发语言的依赖,这使得内部循环变得困难甚至不可行。这还可能造成性能下降,特别是当开发过程中的叶节点需要进行修改时。

而在新模式下,对象图表首先从可变对象中创建,正如传统的面向对象编程风格的图表。被标记成“隔离”的单个变量去引用根图表。之后你可以用函数将变量所对应的值从“隔离”T 转换成“不可变”T,以达到“恢复不可变性”的作用。(谨记,“隔离”和“不可变”是变量类型的限定符,而非它们所引用的对象类型。)

这样做的主要原因在于,这让我们可以使用更安全的并行机制。编译器能够通过权限的限定符来判断程序是否安全地访问对象,并且不会引入竞争条件。尽管这样做无法彻底地消除死锁,但至少能够减少死锁的频率。

这种设计还开启了优化编译器及执行环境的新途径。

比如对不可变数据,并发的垃圾回收可以使用更灵活的可读边界。编译器变得更支持 Code Motion 以及缓存,并支持通过 MSIL-to-native 传递将不可变数据保留为二进制方式。

Colin S. Gordon、Matthew J. Parkinson、Jared Parsons、Aleks Bromfield 和 Joe Duffy 共同撰写了《安全的并行机制的唯一性和不可变性引用》。

查看英文原文: Research into Uniqueness and Reference Immutability for Safe Parallelism in C#


感谢侯伯薇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-12-20 04:322293

评论

发布
暂无评论
发现更多内容

Photoshop Web版本用了哪些CSS技术

南城FE

CSS css3 前端 PhotoShop

全国气温跳水大赛启幕,华为天气提醒用户及时添衣

最新动态

APP 备案公钥、签名 MD5、SHA-1、SHA-256获取方法。

Mac专业级音频制作软件 Logic Pro

展初云

Mac软件 音频处理 Logic Pro

Transmit 5 for Mac文件传输客户端

展初云

文件传输 ftp Mac软件

垃圾回收是什么?

暂时不愿意透露姓名的热心人士

垃圾回收

亚马逊云科技大语言模型下的六大创新应用功能

淼.

Mac电脑专业级音频制作软件 Logic Pro X中文免激活

胖墩儿不胖y

Mac软件 音频处理 音频制作软件 音频管理工具

SDK可以支持本地检测吗

矩视智能

深度学习

Java多线程开发系列1:操作系统进程与线程

BigBang!

线程 进程 Java多线程

Linux操作系统中软件安装:用RPM包管理器安装软件步骤

小齐写代码

Python 文件处理指南:打开、读取、写入、追加、创建和删除文件

小万哥

Python 程序员 软件 后端 开发

OpenHarmony,奏响中国基础软件的“光辉岁月”

脑极体

开源鸿蒙

对话在行人|泰开集团:通过财务数智化转型,实现多重管控要求

用友BIP

对话在行人 数智化领先实践

pycharm pro 2023.2.4中文版 支持M1

加油,小妞!

开发工具 PyCharm Pro

平台工程动态 Monthly News 2023-10

杨振涛

DevOps 平台 平台工程 平台工程社区 PECommunity

合约交易所系统开发搭建流程

区块链技术

针对海量审计日志统计分析的Amazon OpenSearch Service应用

Hanson

【我和极客时间的故事】极客时间带给我的成长

三掌柜

我和极客时间的故事

域名证书到期,如何通过nginx更换https证书

javaNice

nginx

用友成功签约国家能源全资子公司-宁波风电

用友BIP

财务数智化

Macos ftp传输工具:Transmit 5 中文版 支持M1 附安装

加油,小妞!

ftp传输 Transmit 5

API自动化测试​

谷云科技RestCloud

API测试 API 接口

一起学Elasticsearch系列-索引的CRUD

Java随想录

Java ES

CodeWhisperer 的正确使用

亚马逊云科技 (Amazon Web Services)

人工智能 GitHub 云上探索实验室 Amazon CodeWhisperer Amazon Bedrock

Programming abstractions in C阅读笔记:p184-p195

codists

《用友企业绩效管理白皮书》要点解读之趋势洞察

用友BIP

企业绩效管理

物联网卡运营 阶梯限速、阶梯防超套、自动化推送

开源物联卡管理平台-设备管理

物联网 IoT SIM卡 eSIM安全 java 技术提升

从研发域到量产域的自动驾驶工具链探索与实践

百度Geek说

人工智能 自动驾驶 dubbo 企业号11月PK榜

Bartender 5 for mac菜单栏图标管理软件

展初云

Mac Bartender 菜单栏图标管理软件

C#中安全并行机制的唯一性和引用不可变性研究_C#_Jonathan Allen_InfoQ精选文章