我似乎无法在我的Android模拟器中启动任何应用程序,因为每次出现此错误大约2秒钟,我相信这会让我的应用程序崩溃...
注意:我从来没有尝试过录制音频,我认为它正在尝试...所以为什么要显示这个?虽然我试图用一个从未奏效的输入流打开JPCT-AE的3D模型!
错误:
04-01 21:02:29.798 2160-2160/com.google.android.googlequicksearchbox:search I/MicroDetectionWorker: Micro detection mode: [mDetectionMode: [1]].
04-01 21:02:29.798 2160-2160/com.google.android.googlequicksearchbox:search I/AudioController: Using mInputStreamFactoryBuilder
04-01 21:02:29.805 2160-3055/com.google.android.googlequicksearchbox:search I/MicroRecognitionRunner: Starting detection.
04-01 21:02:29.805 2160-2204/com.google.android.googlequicksearchbox:search I/MicrophoneInputStream: mic_starting com.google.android.apps.gsa.staticplugins.z.c@652d8ac
04-01 21:02:29.806 1302-1640/? W/APM_AudioPolicyManager: getInputForAttr() failed opening input: samplingRate 16000, format 1, channelMask 10
04-01 21:02:29.806 2160-2204/com.google.android.googlequicksearchbox:search E/AudioRecord: Could not get audio input for session 441, record source 1999, sample rate 16000, format 0x1, channel mask 0x10, flags 0
04-01 21:02:29.807 2160-2204/com.google.android.googlequicksearchbox:search E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed …Run Code Online (Sandbox Code Playgroud) 我有一些关于 Go 与sync.Mutex一起使用的相关问题struct。例如,如果我要这样struct:
type something struct {
aMux sync.Mutex
a map[string]interface{}
bMux sync.Mutex
b int
}
Run Code Online (Sandbox Code Playgroud)
...在没有竞争条件的情况下并发锁定和访问时锁定和访问是否安全?bMuxbaMuxa
知道我正在访问指向结构的指针,并使用这样的方法同时锁定/解锁互斥体可能也很有帮助:
func (s *something) addA(k string, v interface{}) {
(*s).aMux.Lock()
(*s).a[k] = v
(*s).aMux.Unlock()
}
func (s *something) addB(k string, v interface{}) {
(*s).bMux.Lock()
(*s).b++
(*s).bMux.Unlock()
}
Run Code Online (Sandbox Code Playgroud)
我的假设是,理论上这应该是安全的,因为您已经可以锁定结构中的互斥锁,而无需访问它锁定的字段。但是,当struct像上面这样取消引用时,Go 是否会复制所有值struct(使其不安全),还是只修改/检索您指定的字段?
我非常希望将互斥体保留在同一个结构中,因为在我的代码中,我在同一个结构中有多个(最多六个)相关字段,我用互斥体单独锁定它们。如果在同一个结构体中拥有多个互斥体(对于相关字段)是安全的,但不推荐或不好的做法,为什么?什么是更好的结构?