几种常见的死锁问题

在开发多线程程序时,难免会遇到死锁的问题,这里说下我在开发中遇到的几种常见的死锁问题:

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死循环。

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值