兩個線程同時調用一個函數會出現什么情況?


  其實你可以這樣想,函數本身只是代碼,代碼是只讀的,無論多少個線程同時調都無所謂(因為只讀嘛)。

  但是函數里面總要用到數據,如果【用thread_local 解決】數據屬於線程(比如函數參數、局部變量,存在棧上,每個線程都有自己的棧),那么同時調還是沒關系,因為用的本線程的數據;但是如果用了一些全局數據,比如全局變量,同時操作一個數據結構(如對一個鏈表有什么操作),那就不行了,這時候鎖【Mutual, lock】就出來了。

  因此需要互斥處理的,一般是函數中有全局變量,有動態申請的空間,有靜態局部變量,有需要進程數據循環發送(進程傳參數給線程)之類的操作需要進行互斥處理

參考博客:

 1. https://blog.csdn.net/heybeaman/article/details/81189230

 2. https://blog.csdn.net/xiaowei123aa/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM