菜鸟教程小白 发表于 2022-12-12 14:56:16

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


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

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

<pre><code>public unsafe volatile short* readPointer;
public unsafe volatile short* writePointer;
</code></pre>

<p>整个程序可以编译并且运行良好。</p>

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

<pre><code>Build complete -- 2 errors, 0 warnings
MixerChannel.cs(21,39) : error CS0677: `MixerChannel.readPointer&#39;: A volatile field cannot be of the type `short*&#39;
MixerChannel.cs(22,39) : error CS0677: `MixerChannel.writePointer&#39;: A volatile field cannot be of the type `short*&#39;
</code></pre>

<p>根据<a href="https://msdn.microsoft.com/en-us/library/5zyxe13x%28v=vs.90%29.aspx" rel="noreferrer noopener nofollow">MSDN</a> ,我可以创建以下类型的 <code>volatile</code> 字段:</p>

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

<p>但这个错误似乎另有说明。</p>

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

<p>我在这里遗漏了一些明显的东西吗?我坚信<a href="http://c2.com/cgi/wiki?CompilerBug" rel="noreferrer noopener nofollow">compiler writers are demigods</a> ,因此任何错误都是<a href="https://en.wikipedia.org/wiki/Almost_surely" rel="noreferrer noopener nofollow">almost surely</a>在我自己的代码中,而不是在编译器中。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>请引用 <a href="https://bugzilla.xamarin.com/show_bug.cgi?id=23770" rel="noreferrer noopener nofollow">https://bugzilla.xamarin.com/show_bug.cgi?id=23770</a>错误报告及其状态。 </p>

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

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

<p>但是,你很幸运。这个问题应该在 Mono 3.12 中得到修复。所以检查你的版本并升级。</p></p>
                                   
                                                <p style="font-size: 20px;">关于c# - 为什么我不能有一个不安全的 volatile 指针,只有在 AdHoc 模式下?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29483052/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29483052/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: c# - 为什么我不能有一个不安全的 volatile 指针,只有在 AdHoc 模式下?