我正在處理一些C代碼,並且遇到了鎖定互斥鎖的問題。代碼調用一個函數,並且該函數鎖定一個互斥體以確保文件指針不會被覆蓋,對於多個實例,這可能正常工作,可能大約有10-20個被調用的函數單獨調用,但是在下一次調用時,pthread_mutex_lock將返回22的結果。然後我把這個結果放入strerror();並找回了無效的論點。pthread_mutex_lock返回無效參數
無效的參數意味着什麼,感謝您提供的任何幫助。
我正在處理一些C代碼,並且遇到了鎖定互斥鎖的問題。代碼調用一個函數,並且該函數鎖定一個互斥體以確保文件指針不會被覆蓋,對於多個實例,這可能正常工作,可能大約有10-20個被調用的函數單獨調用,但是在下一次調用時,pthread_mutex_lock將返回22的結果。然後我把這個結果放入strerror();並找回了無效的論點。pthread_mutex_lock返回無效參數
無效的參數意味着什麼,感謝您提供的任何幫助。
聽起來像你有一個線程問題或在你的程序其他地方的其他地方。嘗試打印互斥量指針的值。嘗試使用另一個線程來簡單地鎖定互斥鎖,然後將時間打印到日誌文件並且鎖定成功,然後解鎖互斥鎖。我懷疑問題不在你正在尋找的地方。另外,正如其他人在這裏所說的,你最好的選擇是創建一個非常小的測試程序來演示這個問題並將其發佈到這裏。有可能你無法獲得那個小程序來證明錯誤。然後慢慢將所有原始代碼添加到小程序中,直到錯誤返回。如果它返回,你現在知道是什麼導致了這個問題。如果它沒有回來,你就完成了。
22是ENVAL
錯誤代碼,這意味着invlalid參數。確保你已經啓動了你的互斥體,或者如果在某個時候你已經將它集成在某個地方。
EINVAL
互斥用具有 值PTHREAD_PRIO_PROTECT和調用線程的優先級協議屬性創建高 不是互斥的當前優先級上限。
我不太瞭解這個,但這可能意味着您需要更改線程的優先級。我不確定。也許別人可以照亮它。
有沒有辦法找出互斥體是否已經被初始化,在我打印內存地址的那一刻,它總是返回相同的值,所以我不認爲它獲得了未初始化,它肯定被初始化爲開始作爲前幾個運行良好的工作 – Boardy