我有一大块数据(约2 GB),需要使用zlib(deflate())进行压缩。我目前每次读取500 kb的数据,进行压缩并将其写入输出文件。当只有1个线程时,一切正常。数据被压缩,我可以写入并解压回来。但当有2个线程时,程序在deflate()调用时挂起。以下是我两个zlib压缩线程调用的函数概述。
static z_stream z_str;
zlib_compress(...., bool last, bool first)
{
if (first)
deflateInit(&z_str, Z_DEFAULT_COMPRESSION);
if (last)
flush = Z_FINISH;
else
flush = Z_SYNC_FLUSH;
....
....
status = deflate(&z_str, flush);
...
...
if (last)
deflateEnd(&z_str);
}
据我理解,在调用deflate()时,这两个调用都引用了同一个zstream,导致了不良行为。
我尝试将z_str作为本地变量,并相应地修改代码。但在解压缩时,它假定文件的总大小为512,而实际上只是第一块数据。
有什么想法可以实现这一点吗?