簡體   English   中英

易失性sig_atomic_t的存儲器安全性

[英]memory safety of volatile sig_atomic_t

volatile sig_atomic_t是保證在信號處理程序和主應用程序之間共享數據的安全方法。 當在具有更寬松內存模型的現代CPU上運行時,Posix可以保證什么內存排序。 具體來說,在使用volatile sig_atomic_t讀取或寫入數據時,應該使用存儲屏障/存儲柵欄嗎?

編輯:只是為了澄清。 我的問題是,當使用sig_atomic_t時,如何才能保證就輕松的內存順序而言不會發生壞事,尤其是在現代高度緩存,多核等架構中。

由於POSIX尚未與C ++(C11)內存模型集成在一起,因此目前不做任何內存排序保證。

C11確保類型volatile sig_atomic_t對象即使沒有圍牆也可以跨信號處理程序保留其值。 如果訪問其他對象,則其值不確定。 atomic_signal_fence名稱錯誤,因為如標准中所規定,它不能用於訪問其他類型的對象(除volatile sig_atomic_t之外),以使它們在信號處理程序中保留其值。

對於異步信號,可以通過在專用線程中處理它們並為所有其他線程阻塞它們來避免這些問題。 對於大多數同步信號(例如,整數除以零觸發的SIGFPE ,或用於訪問未映射內存的SIGBUSSIGSEGV ),我認為沒有任何標准指定發生了什么。 這確實很奇怪,因為異步信號應該更難處理,但目前情況恰恰相反。

暫無
暫無

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

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