亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

malloc線程安全嗎?

malloc線程安全嗎?

C
素胚勾勒不出你 2019-08-27 10:46:31
malloc線程安全嗎?malloc()功能是否可重入?
查看完整描述

3 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

問題:“是malloc reentrant”嗎?
答:不,不是。以下是使例程重入的定義。

malloc的常見版本都不允許您重新輸入它(例如,來自信號處理程序)。請注意,可重入例程可能不使用鎖,并且現有的幾乎所有malloc版本都使用鎖(這使它們成為線程安全的)或全局/靜態變量(這使得它們不是線程不安全不可重入)。

到目前為止,所有的答案都回答“是malloc線程安全嗎?”,這是一個完全不同的問題。對于這個問題,答案是它取決于你的運行時庫,也可能取決于你使用的編譯器標志。在任何現代UNIX上,默認情況下您將獲得一個線程安全的malloc。在Windows中,使用/MT,/MTd,/MD/MDd標志來獲得線程安全的運行時庫。


查看完整回答
反對 回復 2019-08-27
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

這是一個非常古老的問題,我希望根據當前的狀況帶來新鮮感。

是的,目前malloc()是線程安全的。

GNU C庫參考手冊glibc-2.20 [released 2014-09-07]

void * malloc (size_t size)

初步:MT-Safe | ...

...... 1.2.2.1 POSIX安全概念:

... MT-Safe或線程安全功能可以在其他線程存在的情況下安全地調用。在MT-Safe中,MT代表Multi Thread。

MT-Safe并不意味著函數是原子的,也不是它使用POSIX向用戶公開的任何內存同步機制。甚至可能按順序調用MT-Safe功能也不會產生MT-Safe組合。例如,讓一個線程一個接一個地調用兩個MT-Safe函數并不能保證等同于兩個函數組合的原子執行的行為,因為其他線程中的并發調用可能以破壞性方式干擾。

可以跨庫接口內聯函數的整個程序優化可能會暴露不安全的重新排序,因此不建議在GNU C庫接口上執行內聯。在全程序優化下,無法保證記錄的MT安全狀態。但是,用戶可見標頭中定義的功能旨在安全地進行內聯。


查看完整回答
反對 回復 2019-08-27
  • 3 回答
  • 0 關注
  • 1184 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號