当前位置:网站首页>d共享左值
d共享左值
2022-08-11 11:27:00 【fqbqrr】
shared TT[] a;
T processArray(T)(ref T[] p){
/*...*/}
//函数在参数上调用`.保留`.意思是`void`为函数`返回类型`
a.processArray;
//不能从`!()(shared(T[]))`推导.
即使更改函数为仅接受
共享参数,.reserve
也不支持共享
,因此如果不更改
类型或使用__gshared
,则无法使用该函数.
除了使用
指针和强制(用processArray(*(cast(Unqual!TT*)&a))
转换,不理想)之外,有没有更好的方法来不转换为右值的转换左值
类型?(因为编译失败
,直接强制转换
似乎会创建右值
.)
谢谢
.reserve
无法正确支持shared
,因为在整个程序
中,它不知道如何正确同步
切片及其内容.
一般,丢弃shared
让编译器停止
抱怨,完全违背shared
的目的,与__gshared
一样不安全.
相反,必须自己,如使用core.sync.mutex
来同步
.只有正确同步,才可丢弃shared
.这是shared
的目的,且与__gshared
的唯一区别:转换时,记住要同步
.
一般,应该同步整个shared
代码保护区域,同步单个操作(就像单独同步.reserve)
一般是错误的,或更确切地说,是不够
的.
同步
必须保证:当线程写入
数据时,它具有独占
访问权限.但是,只要此时不写入
数据,多线程
同时读取
数据是安全且快速
的.core.sync.rwmutex
可以用来实现该优化.
(可用无锁
算法(请见core.atomic
)或其他更复杂
的方案来设计支持多个同时写入
算法,这很难,有时不必).
最后,如果只需要写入一次
数据,之后只会
读它,则可跳过所有这些混乱和复杂性
,只需从非共享
容器中的单线程
准备数据,然后使用cast(immutable)
(如果只有一个现存引用)或.idup
(否则).不必同步immutable
数据.*(cast(Unqual!TT*)&a)
,这是重新强制转换左值
的正确方法(前提是生成类型
与源类型兼容).
(因为编译
失败,直接转换
似乎创建了右值
.)
是的,直接转换
应该产生右值
.(虽然,可用自定opCast
义来去掉它.)
边栏推荐
- 虚拟机使用 WinSCP & Putty
- 1元限时秒杀 | 接口抓包分析与Mock实战训练营
- a-upload上传图片去掉预览icon
- PerfView project (first) : how to find hot spots function
- 如何设计一组会出现死锁(Deadlock)的ABAP程序
- Use Function Compute to package and download OSS files [Encounter Pit Collection]
- Flutter 教程之 Flutter 中的 HMS 定位工具包
- 挑战52天背完小猪佩奇(第02天)
- 闪灯IC,可按要求开发各种规格闪灯IC,单片机方案开发
- 【学习笔记】线性规划对偶定理
猜你喜欢
I got the P8 "top" distributed architecture manual that went viral on Ali's intranet
[10点公开课]:AV1编码器的优化及其在流媒体和实时通讯中的应用
【Opencv】-----倾斜图片转正
重要消息丨.NET Core 3.1 将于今年12月13日结束支持
centos linux 下安装mysql 8.0
4. 继承
PerfView project (first) : how to find hot spots function
C语言手写魂斗罗(一)
巧用自定义函数,文本控件秒变高速缓存
从抖音到火山引擎——看流媒体技术演进和机会
随机推荐
Web3 创业者指南:如何为你的产品构建一个去中心化社区?
学习二叉树
【学习笔记】尚未用过的图论知识
神经网络可视化有3D版本了,美到沦陷!(已开源)
微信小游戏是个人尝试做游戏最好的选择
Use Function Compute to package and download OSS files [Encounter Pit Collection]
EastWave应用:负折射现象实时演示
[Study Notes] Maximum matching of general graphs
exist和in的区别
leetcode:373. 查找和最小的 K 对数字
嵌入式开发:提示和技巧——退出时休眠
通过热透镜聚焦不同类型的高斯模式
悠漓带你玩转C语言(详解操作符1)
网络安全——nmap
How long does it take to train a neural network, neural network training takes too long
fetch请求设置请求头错误导致无法跨域
黑马瑞吉外卖之分类信息的分页查询
Analyzes how Flink task than YARN container memory limit
同城是美团电商的解法吗?
[Study Notes] Dual Theorem of Linear Programming