首页 > 解决方案 > AudioStream::getTimestamp 的线程不安全是什么?

问题描述

Oboe 文档说某些函数是线程不安全的,建议使用互斥锁进行保护。https://github.com/google/oboe/blob/master/docs/FullGuide.md#thread-safety

getTimestamp 是一个吸气剂。你能澄清一下到底什么是线程不安全的吗?是否根本不能保证线程之间单调递增?在设置某些基础状态和 AAudio 读取的状态之间是否存在实际的竞争条件?getTimestamp 是否以某种不安全的方式修改底层流的状态?

我找不到 getTimestamp 的实现。似乎 AAudio 询问音频流https://android.googlesource.com/platform/frameworks/av/+/master/media/libaaudio/src/core/AAudioAudio.cpp#519。但是音频流询问AAudio?https://android.googlesource.com/platform/frameworks/av/+/master/media/libaaudio/src/core/AudioStream.h#99

--

编辑:你能澄清一下如何保证线程安全吗?我理解为共享内存锁定互斥锁的愿望,但这只是一种选择(1)如果您可以容忍锁定,并且(2)可以访问共享互斥锁。是否有保护内存的共享互斥锁或内存栅栏?通常对于音频应用程序,我们不能容忍在音频回调中锁定,那么有无锁定解决方案吗?

本文建议数据可能写入在另一个 CPU https://linux.die.net/man/3/clock_gettime上无法安全读取的寄存器中。getTimestamp 是否使用此实现?你能澄清谁写入任何保存时间戳的内存吗?有什么方法可以确保调用者在同一个 CPU 上调用并且它为时间戳提供真实值?

标签: androidoboe

解决方案


推荐阅读