我擁有包裝在shared_ptr中的資源「resource」,並且我想從其他線程訪問它。 當我這樣做:C++返回函數lock_guard
// foo.h
class Foo{
public:
std::shared_ptr<Setup> GetSomeThing();
void SetSomeThing();
private:
std::shared_ptr<Setup> resource;
std::mutex lock;
}
//Foo.cpp
std::shared_ptr<Setup> Foo::GetSomeThing()
{
std::lock_guard<std::mutex> lock (mutex);
return resource;
}
void Foo::SetSomeThing()
{
std::lock_guard<std::mutex> lock (mutex);
resource = ...;
}
這一切都好嗎? 什麼時候會創建一個返回對象,什麼時候會被銷燬?它在文檔中是否存在一些關於它的內容? 謝謝!
'lock'會在範圍退出時被銷燬,所以它是完全沒有意義的。相反,調用線程應該創建這個鎖,然後調用'Foo :: GetSomeThing'並處理相同(或內部)範圍內的某些內容,同時'lock'仍然存在。 – VTT
您需要在所有線程之間使用常見的互斥鎖,並且在所有線程中也使用lock_guard或類似鎖。例如Foo還應該有一個std :: mutex _mtxResource - 然後std :: lock_guard lock(foo._mtxResource);無論你需要在你的線程中使用資源。 –
@VTT請再次看到代碼示例)它仍然毫無意義? – voltento