关于 AudioStream::getTimestamp 的线程不安全是什么?

问题描述

双簧管文档说某些函数是线程不安全的,建议使用互斥锁进行保护。 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。但是音频流询问AAudiohttps://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调用并且它提供时间戳的真实值?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)