在开发多线程程序时,难免会遇到死锁的问题,这里说下我在开发中遇到的几种常见的死锁问题:
1、线程1先加锁A,然后再加锁B,线程2先加锁B,再加锁A
为避免这种情况,在编程时尽量减小没把锁的范围,同时尽量避免多个线程对几把锁加锁顺序不同的情况,以免出现互锁导致死锁的现象。
2、同一个线程出现对同一把锁,在未解锁的情况下,多次加锁
3、同一个线程,在加锁后,由于某种异常情况没有处理,导致for循环或while循环一直不能退出且锁一直被该线程占用,导致其它使用该锁的线程一直阻塞,下面是一段伪代码来展示这种情况:
Lock();
while(!Queue.empty())
{
stream = Queue.front();
if (GetVideoCodec()) {
//todo:正常处理编码器媒体
}
else
{
continue;
}
Queue.pop_front();
}
UnLock();
正常情况下,编解码器是存在的,但是由于某种情况,编解码器没有被创建,导致while死循环。