其實你可以這樣想,函數本身只是代碼,代碼是只讀的,無論多少個線程同時調都無所謂(因為只讀嘛)。
但是函數里面總要用到數據,如果【用thread_local 解決】數據屬於線程(比如函數參數、局部變量,存在棧上,每個線程都有自己的棧),那么同時調還是沒關系,因為用的本線程的數據;但是如果用了一些全局數據,比如全局變量,同時操作一個數據結構(如對一個鏈表有什么操作),那就不行了,這時候鎖【Mutual, lock】就出來了。
因此需要互斥處理的,一般是函數中有全局變量,有動態申請的空間,有靜態局部變量,有需要進程數據循環發送(進程傳參數給線程)之類的操作需要進行互斥處理
參考博客: