• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c# - 为什么我不能有一个不安全的 volatile 指针,只有在 AdHoc 模式下?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:56:16 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我使用 xamarin.iOS 在 c# 中使用 CoreAudio 编写了一个低级音频播放器。

在其中一个类中,我有两个 volatile 指针,方式如下:

public unsafe volatile short* readPointer;
public unsafe volatile short* writePointer;

整个程序可以编译并且运行良好。

我还设置了一个 Jenkins 构建机器,因此它在我的项目文件上调用 mdtool 以在 AdHoc 模式下构建它。但是,当我以这种方式构建时,出现以下错误:

Build complete -- 2 errors, 0 warnings
MixerChannel.cs(21,39) : error CS0677: `MixerChannel.readPointer': A volatile field cannot be of the type `short*'
MixerChannel.cs(22,39) : error CS0677: `MixerChannel.writePointer': A volatile field cannot be of the type `short*'

根据MSDN ,我可以创建以下类型的 volatile 字段:

  • 任何引用类型
  • 任何指针类型(在不安全的上下文中)
  • 类型 sbyte、byte、short、ushort、int、uint、char、float、bool
  • 基于上述任何类型的枚举类型

但这个错误似乎另有说明。

Jenkins 构建机器与我用来构建调试的机器完全相同。但是,构建过程不同:对于调试,我使用 xamarin 构建主机,并使用 Visual Studio 2010 从 Windows 机器构建。对于 Jenkins 构建,我使用远程调用的 mdtool使用 plink 的同一个 Window 框。

我在这里遗漏了一些明显的东西吗?我坚信compiler writers are demigods ,因此任何错误都是almost surely在我自己的代码中,而不是在编译器中。



Best Answer-推荐答案


请引用 https://bugzilla.xamarin.com/show_bug.cgi?id=23770错误报告及其状态。

似乎编译器编写者虽然是半神,但有时仍然会出错(在这种情况下是单声道编译器)。

一般来说,他们要么迅速纠正这些错误,要么用闪电击中提到这些错误的人。

但是,你很幸运。这个问题应该在 Mono 3.12 中得到修复。所以检查你的版本并升级。

关于c# - 为什么我不能有一个不安全的 volatile 指针,只有在 AdHoc 模式下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29483052/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap