大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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:322338

评论

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

iPhone15系列发布,正式宣布对AV1的硬解支持

微帧Visionular

视频编解码

如何使用极狐GitLab 支持 ISO 27001 合规

极狐GitLab

DevOps gitlab ISO 组织控制 技术控制

软件测试/测试开发丨venv 环境管理 学习笔记

测试人

软件测试 虚拟环境 venv

打造次世代分析型数据库(三):列存表最佳实践

腾讯云大数据

数据库

GPU云还是传统图形工作站?测绘单位的探索和创新

青椒云云电脑

图形工作站

恭喜!龙蜥获得 2023 大学生操作系统设计赛二等奖及特殊贡献奖

OpenAnolis小助手

开源 操作系统 龙蜥社区 获奖 全国大学生系统能力大赛

精打细算:出海企业如何选择低成本高效率的产品推广渠道

出海的猹

营销 出海社交 产品增长 出海企业

XR扩展现实的最新趋势-云流化技术

3DCAT实时渲染

云流化 CLOUDXR

打造高能低碳电脑,英特尔与合作伙伴都做了什么?

E科讯

GPU云桌面如何赋能3D图形制作场景

青椒云云电脑

桌面云 云桌面

电脑宕机耽误工作?云桌面办公上云更高效

青椒云云电脑

云桌面

快速加入Health Kit,一文了解审核流程

HarmonyOS SDK

huawei HarmonyOS

【Java入门】交换数组中两个元素的位置

飞算JavaAI开发助手

代码 java; 程序员‘’ 软件开发、

出海第一步,先选云服务

出海的猹

出海服务商 海外市场 出海企业 云服务商

Apache IoTDB 毕业三周年!纪念T恤+表情包免费来袭~

Apache IoTDB

华为Mate 60抢火车票也“遥遥领先”,负一屏抢票享满减!

最新动态

云电脑到底是不是自己的电脑?

青椒云云电脑

云电脑

最高提升10倍性能!揭秘火山引擎ByteHouse查询优化器实现方案

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号9月PK榜

极狐GitLab CI x Vault,做好企业密钥安全合规管理

极狐GitLab

gitlab cicd 安全 cli vault

和鲸科技:国家气象信息中心人工智能气象应用基础支撑技术平台正式上线

ModelWhale

人工智能 AI 气象 地球科学 国家气象中心

一文读懂GPU虚拟化、显卡直通和GPU云桌面

青椒云云电脑

桌面云 云桌面

企业如何高效平滑迁移数据?火山引擎DataLeap上线整库搬迁解决方案

字节跳动数据平台

数据中台 数据治理 数据安全 数据研发 企业号9月PK榜

关于TPM营销费用管理,品牌快消企业最关心的问题都在这里

赛博威科技

营销数字化 投资分析 数字营销 营销管理 预算管理信息化

平台工程实践,让应用开发如搭积木一般简单

北京好雨科技有限公司

Kubernetes DevOps 平台工程

如何构建现代化数据平台?私有云五大方面赋能企业用户

青椒云云电脑

云平台 云平台技术

一文读懂GPU直通技术

青椒云云电脑

gpu

技术科普:汽车开放系统架构AUTOSAR

DevOps和数字孪生

汽车 AUTOSAR

Serverless 数仓技术与挑战 - 张雁飞|3306π

Databend

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