std::shared_ptr<Dog> pd;
void F() {
pd = std::make_shared<Dog>("Smokey");
}
int main() {
std::thread t1(F);
std::thread t2(F);
t1.join();
t2.join();
return 0;
}
std::shared_ptr<Dog> pd(new Dog("Gunner"));
void F() {
std::shared_ptr<Dog> localCopy = pd;
}
int main() {
std::thread t1(F);
std::thread t2(F);
t1.join();
t2.join();
return 0;
}
在C++中,我了解到std::shared_ptr对于读取和复制是线程安全的。但是我对于何时需要使用互斥锁来同步线程有些困惑。我有两段代码片段。在第一段代码中,std::shared_ptr被多个线程修改。在第二段代码中,每个线程只是从共享指针中读取和复制。在这两种情况下,我是否都需要互斥锁?为什么或者为什么不需要?
std::shared_ptr
变量并不比其他类型的变量更具线程安全性。如果多个线程访问(读取或写入)该变量,并且其中至少一个线程对其进行写入操作,那么所有这些访问都必须进行“同步”。一种同步的方法是在访问该变量时,所有线程都锁定相同的互斥锁。 - Solomon Slowstd::shared_ptr
变量在线程安全方面并不比其他类型的变量更安全。如果多个线程访问(读取或写入)该变量,并且其中至少一个线程对变量进行写入操作,则_所有_这些访问都必须进行“同步”。一种同步的方法是,所有线程在访问该变量时都锁定相同的互斥量。 - Solomon Slow