0
我已經寫了一個DLL來存儲memroy中的一些信息,有很多線程想要 同時訪問數據,所以我使用讀/寫鎖來同步。並且我將 的某些功能導出給用戶,在函數中,我需要鎖,然後獲取數據,然後退出 並釋放鎖。例如,像這個功能。實現兩級鎖
void GetData(data)
{
//require lock
//get data
//release lock
}
我的用戶可以調用的GetData多次在那裏的功能,例如,
void ProcessData()
{
// do something 1
GetData(data1);
// do something 2
GetData(data2);
...
}
在同一時間,其他線程可以通過我的DLL的調用其他導出功能改變我的DLL數據,所以數據可能會在GetData(data)之間變化;和GetData(data2);但是我的用戶希望我的數據在ProcessData中永遠不會改變,因爲在這種情況下data1可能會與data2相關聯。 我不想在我的dll中暴露我的鎖。 有沒有辦法實現這樣的事情,Thx!
請用適合的語言爲您的問題添加標籤...... –
您似乎已經想出了您需要做的事情,您只需要熟悉正確的庫接口即可。最好的答案可能取決於你的平臺。作爲一些可能的示例,搜索「pthread_rwlock_init」或「InitializeSRWLock」。 Boost或C++ 11可能也有幫助;不知道他們提供了什麼...此外,根據您的需要,您可能需要考慮簡單的互斥鎖而不是rwlock。 – asveikau
您發現唯一可靠鎖定的是* client *代碼。通常最不可能的是正確的,這就是線程的難點。 –