簡體   English   中英

C ++`free`函數是否是線程安全的?

[英]Is the C++ `free` function thread-safe?

也就是說,如果我的C ++應用程序使用malloc在一個線程中分配內存,如果從另一個線程調用,將free成功free內存,還是我可以期望它拋出異常? 兩個線程都屬於同一個進程。 我正在使用Visual Studio 2008.謝謝。

當前標准不對線程做出任何保證。 在大多數實現中,可以從不同的線程調用mallocfree Visual C ++堆代碼也序列化對堆的訪問,所以你應該沒問題。

如果mallocfree正確同步,則在另一個線程中釋放內存是完全正確和安全的。 而且,根據C ++ 0x標准,這種說法是正確的。 正如@Ashot所提到的,當前的C ++ 03標准僅涉及單線程執行模型

從某種意義上講,它是線程安全的( malloc池是進程全局的,而不是線程本地的),但是如果在另一個線程調用malloc()free()被調用則不會表現得很安全。

當前的C ++標准甚至不知道線程。 所以在標准方面,我認為你不能判斷它是否正常。 但是程序中的所有線程共享相同的地址空間,因此在其他線程中釋放對象必須是OK。

如果C編譯器和OS支持線程,那么它將是安全的。

如果您的編譯器在Windows上,那么您需要確保鏈接到多線程運行時庫。 或者,如果您的編譯器支持-pthread選項或類似的東西,那么它也是安全的。

如果編譯器確實有像-pthread這樣的標志,那么除非你使用那個標志,否則不要認為事情是線程安全的。 使用該標志將鏈接到不同的庫並設置不同的預處理器宏。 完全可能在給出該標志時鏈接完整的不同線程安全C運行時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM