我编写了用于解码许多.flv视频文件的代码。每个视频文件由单独的线程解码。 当我尝试1个线程时,一切正常。但是当我尝试超过2个线程时,它总是会出现错误“avcodec_open / close()周围的线程锁定不足”。
我搜索过,我知道函数avcodec_open()和avcodec_close()不是线程安全的。 之后,我将互斥锁定在两个函数调用的任何地方。
lockObj.Lock();
avcodec_open/close();
lockObj.UnLock();
但错误“avcodec_open / close()周围的线程锁定不足”仍然会发生。
有人可以告诉我解决方案吗?
非常感谢,
T&安培; T组
答案 0 :(得分:0)
每个帖子中lockObj
是否都是同一个对象?
互斥锁的目的是阻止多个线程同时调用avcodec_open()
。其他线程应该在到达lockObj.Lock()
语句时停止并等待,直到第一个线程调用lockObj.UnLock()
。如果每个线程都有自己的lockObj
,那么这是不可能的。
我已将此方法与QMutex(来自Qt)一起使用,所以我知道这是可能的。