1. 程式人生 > >呼叫libvlc_media_player_stop經常會導致程式掛起

呼叫libvlc_media_player_stop經常會導致程式掛起

最近使用libvlc時碰到這個問題。google了一下。在官方論壇上也很多人碰到這個問題。但是都沒有提供比較好的解決辦法。

VLC社群的人本來時間就不多,有限的精力都花在VLC本身上了,沒有空理會libvlc上出現的問題。

除非哪天整個VLC都在libvlc上搭建,社群的人才會把精力放在libvlc上,呵呵。

還好是開源的,接下來只能自己看原始碼摸索了。

後面發現原來是呼叫libvlc_media_player_stop時發生死鎖了。

通常出現libvlc_media_player_stop函式掛起時,我們都設定了回撥函式,包括display、stop event之類的回撥函式。

由於回撥函式和我們呼叫的libvlc_media_player_stop函式通常不在同一個執行緒上。由於libvlc_media_player_stop函式中需要互斥鎖資源,

如果在回撥函式中呼叫了libvlc中需要互斥鎖資源的介面時,就會出現死鎖的情況。

那麼那些介面是需要互斥鎖資源的呢?

其實,我們不用管這麼多,只需要保持在回撥函式中不呼叫libvlc的其他介面就好了。或者在呼叫介面時做好和其他執行緒的同步處理,讓多個執行緒進行介面呼叫時不要出現資源競爭就好了。

當然在進行同步的時候要優先採用無鎖的機制,保證效率的同時又避免引入潛在的死鎖