小编Chr*_*rdt的帖子

Swift 的写时复制线程安全吗?

根据定义将数组或字典设为值类型,但只有当对其的引用尝试修改它时才实际复制它,这是一个不错的想法,但它让我在多队列/线程上下文中保持警惕。我需要知道:

Swift 的写时复制功能是线程安全的吗?例如:如果我在一个队列上创建一个数组并将其传递到另一个队列,那么任一队列修改它而另一个队列可能正在读取或修改它是否安全?由于根据定义,复制是在数组引用传递到第二个队列时进行的,因此我们是否可以假设 Swift 工程师做了正确的事情并以队列安全的方式实现了写入时复制?

我发现了这个古老的讨论,它看起来很权威,但是是双向的! https://developer.apple.com/forums/thread/53488

一些可靠的声音说它是线程安全的,其他人则说不是。我想这可能是因为在 Swift 的某些早期版本中不是这样,而在 Swift 5 中可能是这样。这里有人确切了解 Swift 5 吗?

下面是一些示例代码来说明该问题:

func func1()
{
    var strings1: [String] = ["A", "B", "C"]
    var strings2: [String] = strings1   // array not actually copied
    queue.async()
    {
        strings2.append("D")
    }

    print(strings1[0])    // is this reference thread-safe?
    strings1.append("E")  // is this modification thread-safe?
}
Run Code Online (Sandbox Code Playgroud)

multithreading copy-on-write swift

5
推荐指数
1
解决办法
424
查看次数

ExtAudioFileRead太慢了.如何让它更快?

我写了自己的音频库.(傻,我知道,但我喜欢它.)现在,我正在用它来播放iOS上iPod库的立体声文件.它运行良好,但有时调用ExtAudioFileRead()的时间超过23毫秒.由于我的AudioUnits输出设置正在以44.1KHz播放音频,并且它要求每回调1024帧.我的代码+ ExtAudioFileRead()的响应时间不得超过23毫秒.

我很惊讶ExtAudioFileRead()太慢了.我正在做的事似乎很正常.我在想,必须有一些我没有做过的无证配置魔法.这是我的相关配置代码:

ExtAudioFileRef _extAudioFileRef;
OSStatus        result;

result = ::ExtAudioFileOpenURL((__bridge CFURLRef)_url, &_extAudioFileRef);

AudioStreamBasicDescription     format;

format.mBitsPerChannel = 8 * sizeof(float);
format.mBytesPerFrame = sizeof(float);
format.mBytesPerPacket = sizeof(float);
format.mChannelsPerFrame = channelCount;
format.mFormatFlags = kAudioFormatFlagIsFloat|kAudioFormatFlagIsNonInterleaved;
format.mFormatID = kAudioFormatLinearPCM;
format.mFramesPerPacket = 1;
format.mSampleRate = framesPerSecond;
result = ::ExtAudioFileSetProperty(_extAudioFileRef,
                                    kExtAudioFileProperty_ClientDataFormat,
                                    sizeof(format),
                                    &format);
Run Code Online (Sandbox Code Playgroud)

我没有设置_extAudioFileRef的任何其他属性.

我已经跟踪了这个问题.我只是调用ExtAudioFileRead()来调整时间,所以我知道这不是我的代码减慢了这个过程.它必须是配置问题,对吧?

非常感谢任何帮助甚至猜测!

干杯,克里斯托弗

core-audio extaudiofile audiounit ios extaudiofileread

1
推荐指数
1
解决办法
171
查看次数