当前位置:网站首页>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
- 性能测试的环境以及测试数据构造
- 六、一起学习Lua 循环
- 同城是美团电商的解法吗?
- 闪灯IC,可按要求开发各种规格闪灯IC,单片机方案开发
- 闪灯芯片银行塔闪灯IC参数应用
- BAT "exclusive" Internet giant Android senior engineer interview questions: 174 questions allow you to do the interview
- 反射获取DLL中的字段、属性、方法、泛型方法(C#)
- go语言学习:并发编程(Sync/GMP/爬虫案例)
- [10点公开课]:AV1编码器的优化及其在流媒体和实时通讯中的应用
猜你喜欢
BAT "exclusive" Internet giant Android senior engineer interview questions: 174 questions allow you to do the interview
从零开始配置 vim(12)——主题配置
宝塔一键部署WordPress(含宝塔添加站点、阿里云安全组配置、阿里云子域名解析)
C语言手写魂斗罗(一)
网络安全——nmap
Web3 创业者指南:如何为你的产品构建一个去中心化社区?
爆赞!阿里P8首次分享出基于Docker的企业级Redis实战开源笔记
SM5200原厂SOT23-6 500mA 线性锂电子替代芯片
阿里云 Hologres助力好未来网校实时数仓降本增效
TX12 + ExpressLRS 915MHz RC控制链路配置及问题汇总
随机推荐
【Opencv】-----倾斜图片转正
TX12 + ExpressLRS RC configuration and control link problem summary 915 MHZ
openresty概述及Lua语言的嵌入
【项目篇- 项目团队部分怎么写、如何作图?(两千字图文总结建议)】创新创业竞赛项目计划书、新苗国创(大创)申报书、挑战杯创业计划竞赛
Azure IoT & NVIDIA Jetson 开发基础
Through the thermal lens focus on different types of gaussian model
4. 继承
EastWave应用:负折射现象实时演示
分析 Flink 任务如何超过 YARN 容器内存限制
闪灯芯片银行塔闪灯IC参数应用
工程师如何对待开源 --- 一个老工程师的肺腑之言
Starting from zero configuration vim (11) -- plug-in management
go语言学习:并发编程(定时器/select/并发安全锁)
或命名“狙击手” 长安全新皮卡申报图
vending machine
fetch请求设置请求头错误导致无法跨域
form-making notes on climbing pits (jeecg project replaces form designer)
【Study Notes】Unused graph theory knowledge
FS2956A 输入8-120V 用于液晶仪表5V-USB 充电口方案
HTM5学习:第一阶段02