android - 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 上调用并且它为时间戳提供真实值?
解决方案
推荐阅读
- javascript - 如何使用 Chrome webRequest 重新创建 POST 请求
- android - 改造第一次调用会冻结 UI
- php - 使用 DOM 爬虫从 url 获取元标记
- javascript - 如何以角度正确设置表单验证
- c - 共享 pthread_cond_broadcast 卡在 futex_wait
- linux - 在 ARM bigLITTLE 上运行 gem5 完整系统时出错
- python - 在python中初始化三维数组,预定义值为-1
- ssl - 服务器使用 LibreSSL,客户端使用 wolfSSL.. 这种通信会成功吗?请指教
- python - python中的dsearchn等价物
- sapui5 - SAPUI5 CDS 视图输入字段 - 仅值帮助