2012-10-12 17 views
2

我正在使用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的線程安全實現?

+1

zalloc和zfree的退化情況是libc malloc,calloc和free例程。他們是線程安全的。 – Petesh

+0

對不起,你是什麼意思的「退化案」? –

+1

通過對zalloc和zfree使用Z_NULL,代碼使用libc的malloc/calloc和空閒例程,並且在Mac OSX/iOS上,這些是線程安全的。 – Petesh

回答

4

malloc()free()在Mac OS X上已經是線程安全的。所以,只要初始化結構Z_NULL你正在做,你會沒事的。

+0

謝謝馬克。我正在使用它們,但得到Zlib放氣錯誤(-3)。如果問題不在zlib中,可能與我的網絡流本身有關。讓我進一步調查一下,一旦我確認問題不在zlib中,我會將此答案標記爲正確。 –

+0

'-3'是一個數據錯誤。這意味着您正在饋送'inflate()'的數據是無效的。 –

+0

是的,問題出在zlib上,而不是zlib上。 –