對fd的各系統呼叫本身是執行緒安全的,比如可以多執行緒同時read/write,但是當乙個fd被close之後,它就相當於成了野指標,而且類似於指標,這個fd還會被重用,可能被重新賦值了,這兩種情況都可能造成嚴重問題,野fd可能導致核心coredump(一般在系統日誌裡有記錄)。
出現問題的根源是因為乙個執行緒close了fd,但另一線程仍在使用,只有在下列情形才會安全:
1.fd還未被重分配
2.系統呼叫發生之前或已經未使用fd(系統呼叫在使用之前通常會檢查fd引數是否有效)
如果解決這樣的問題了?辦法類似於指標,使用引用計數,如何使用引用計數?兩個辦法:
1.應用自己包裝一層,維護顯示的引用計數
2.使用dup使用隱匿引用計數
int i 和 i是執行緒安全的嗎
話不多說,直接貼測試類 public class threadunsafedemo trycatch interruptedexception e latch.await system.out.println 執行完畢.public synchronized static void safemeth...
i 是執行緒安全的嗎?
i 不是原子操作,也就是說,它不是單獨一條指令,而是3條指令 3條彙編指令 1 從記憶體中把i的值取出來放到cpu的暫存器中 2 cpu暫存器的值 1 3 把cpu暫存器的值寫回記憶體 由於執行緒共享棧區,不共享堆區和全域性區,所以當且僅當 i 位於棧上是安全的,反之不安全 i也同理 因為如果是全域...
Servlet是執行緒安全的嗎?
servlet不是執行緒安全的。要解釋為什麼servlet為什麼不是執行緒安全的,需要了解servlet容器 即tomcat 使如何響應http請求的。當tomcat接收到client的http請求時,tomcat從執行緒池中取出乙個執行緒,之後找到該請求對應的servlet物件並進行初始化,之後呼...