zlib: потокобезопасные zalloc и zfree в C?


Я использую библиотеку zlib C для распаковки данных, полученных из сетевого потока, и у меня есть два потока, работающих в двух отдельных NSThreads. Согласно документации zlib, распаковка двух различных потоков zlib в два потока требует, чтобы zalloc и zfree были потокобезопасными. В данный момент я передаю Z_NULL (мой код inflateinit ниже)

zStream.zalloc = Z_NULL;
zStream.zfree = Z_NULL;
zStream.opaque = Z_NULL;
zStream.avail_in = 0;
zStream.next_in = Z_NULL;
int status = inflateInit(&zStream);
if (status != Z_OK)
    DLog(@"zlib setup error");
else
    DLog(@"zlib setup ok");
});

Есть ли у кого-нибудь опыт использования zlib для сжатия нескольких потоков в отдельных потоках? Кто-нибудь видел потокобезопасную реализацию zalloc и zfree?

1 2

1 ответ:

malloc() и free() на Mac OS X уже потокобезопасны. Поэтому просто инициализируйте структуру с помощью Z_NULL , Как вы это делаете, и все будет в порядке.