我正在使用zlib C庫來解壓縮從網絡流接收的數據,並且我有兩個流在兩個單獨的NSThreads中運行。根據zlib文檔,在兩個線程中解壓縮兩個不同的zlib流需要zalloc和zfree是線程安全的。我目前通過Z_NULL(我inflateinit下面的代碼)zlib:C中的線程安全zalloc和zfree?
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的線程安全實現?
zalloc和zfree的退化情況是libc malloc,calloc和free例程。他們是線程安全的。 – Petesh
對不起,你是什麼意思的「退化案」? –
通過對zalloc和zfree使用Z_NULL,代碼使用libc的malloc/calloc和空閒例程,並且在Mac OSX/iOS上,這些是線程安全的。 – Petesh