【发布时间】:2020-02-22 21:53:54
【问题描述】:
我正在处理线程,有时需要在等待另一个线程完成时暂停一个线程。我有时会使用信号量来阻止另一个线程中的函数在完成之前返回(比如等待设备的相机关闭)。问题是,有时在主线程上调用一个函数,它会锁定应用程序直到它返回。在这种情况下,我可以使用调用 sleep() 的 while 循环来阻止“旋转的沙滩球”向用户显示。有没有更好的解决方案可以阻止沙滩球?
【问题讨论】:
-
你可以看看 spinlocks.. 它可能对你有帮助
-
睡眠的问题是你几乎总是睡得比必要的时间长,或者你的睡眠时间太短以至于你真的只是在等待,这很浪费 CPU。
-
“锁定应用程序”是什么意思? GUI 不响应消息?
-
Martin,是的,因为主线程被阻塞,所以没有响应用户输入。在 Mac 上,这会显示沙滩球光标,而在 Android 上,您会收到 Logcat 警告,表明主线程已被阻止。
标签: java android c multithreading macos