改正 搶占式camera的可能帶來死鎖問題

2021-07-02 02:27:37 字數 841 閱讀 4680

背景:

實現強佔

式camera service

,當某些應用(如手電筒)在後台開啟

camera

後,當時可以

強佔被後台應用占有的

camera.

注意,由於這樣修改破壞了android原生的camera service規則,有可能導致某些三方apk出現異常

問題:概率性死鎖

分析:關閉:jni--》cameraclient::disconnect()

voidcameraservice::removeclientbyremote(const wp& remotebinder)---》        canconnectunsafe()

//同樣也會獲取lock:mlock ---->屬於mediaserver應用程序空間。

小結:對於mlock與mservicelock,也就是說關閉過程,它們屬於應用程序空間。開啟過程,它們屬於mediaserver程序。因此,mlock 與mservicelock 有可能死鎖。

比如:a程序在關閉camera的過程,跑到cameraservice::removeclientbyremote()嘗試獲取lock:mservicelock,但是程序b先執行了,且嘗試去開啟camera,就會跑到mediaserver程序也獲取lock:mservicelock。也就是mediaserver程序先獲取了mservicelock,再嘗試去獲取mlock,但是a程序先獲得了mlock。

執行緒的搶占式和非搶占式排程

在乙個程序裡,執行緒的排程有搶占式或者非搶占的模式。在搶占模式下,作業系統負責分配 時間給各個程序,一旦當前的程序使用完分配給自己的 時間,作業系統將決定下乙個占用 時間的是哪乙個執行緒。因此作業系統將定期的中斷當前正在執行的執行緒,將 分配給在等待佇列的下乙個執行緒。所以任何乙個執行緒都不能獨佔 ...

搶占式核心與非搶占式核心的區別

核心搶占 可搶占式核心 即當程序位於核心空間時,有乙個更高優先順序的任務出現時,如果當前核心允許搶占,則可以將當前任務掛起,執行優先順序更高的程序。非搶占式核心 高優先順序的程序不能中止正在核心中執行的低優先順序的程序而搶占cpu執行。程序一旦處於核心態 例如使用者程序執行系統呼叫 則除非程序自願放...

執行緒的排程有搶占式或者非搶占

在乙個程序裡,執行緒的排程有搶占式或者非搶占的模式。在搶占模式下,作業系統負責分配 時間給各個程序,一旦當前的程序使用完分配給自己的 時間,作業系統將決定下乙個占用 時間的是哪乙個執行緒。因此作業系統將定期的中斷當前正在執行的執行緒,將 分配給在等待佇列的下乙個執行緒。所以任何乙個執行緒都不能獨佔 ...