谷歌PDFium库不能多线程调用,需要加全局锁。pdf doc析构时也要加锁。
ScopedFPDFDocument是个std::unique_ptr<>。
static std::mutex g_pdfLock;
CMyPDFProcessor {
public:
~CMyPDFProcessor();
private:
ScopedFPDFDocument m_pdfDoc;
}
这种写法不行,因为锁到了右花括号就析构,而编译器自动加的析构m_pdfDoc的代码在花括号之后:
CMyPDFProcessor::~CMyPDFProcessor(){
std::lock_guard<std::mutex> guard{g_pdfLock};
}
改为这种写法:
CMyPDFProcessor::~CMyPDFProcessor(){
{
std::lock_guard<std::mutex> guard{g_pdfLock};
ScopedFPDFDocument pdfDoc = std::move(m_pdfDoc);
}
}
或者:
CMyPDFProcessor::~CMyPDFProcessor(){
std::lock_guard<std::mutex> guard{g_pdfLock};
m_pdfDoc.reset();
}
--
FROM 114.254.46.*