為什么要用多線程?在音視頻領域主要是實現音視頻同步。實現了音視頻同步,我們的播放器就基本上合格了。
這里我們將講解一下SDL的多線程與鎖機制。
多線程的好處主要是能使程序更加充分利用硬件(主要是CPU)的性能。但是也存在相應的隱患,如果多線程管理不好,會出現協調問題。
引進的機制:線程的互斥與同步
互斥:同一個資源在一定時間內只能由一個方法訪問。
同步:一個方法完成后的內容需要同步到其他的方法,在由其他方法操作完成后的內容。
鎖與信號量
鎖用於完成互斥;信號量用於同步。
鎖的種類:讀寫鎖、自旋鎖、可重入鎖。
SDL線程創建:SDL_CreateThread
SDL線程等待:SDL_WaitThead
SDL互斥鎖:SDL_CreateMutex / SDL_DestroyMutex
SDL鎖定互斥:SDL_LockMutex / SDL_UnlockMutex
SDL 條件變量(信號量):SDL_CreateCond / SDL_DestoryCond
SDL 條件變量(信號量)等待 / 通知 :SDL_CondWait / SDL_CondSingal
SDL鎖和條件變量使用場景:主要用於AVPacketList隊列的讀取控制,真正的用法需要在實際項目中進行理解和領會。
下圖是SDL開發播放器的線程模型,供大家開發和學習時參考: