经过测试:
Windows x86_64(MSVS 2013和2015)
Linux x86_64(g ++ 6.3.0和clang 3.8.0)
此代码在在线编译器中:http : //coliru.stacked-crooked.com/a/a97a84ff26c6e9ee
将safe_ptr <>与rw-lock一起使用。
要将安全指针与rw-lock而不是unique-lock一起使用,只需 #include <safe_ptr.h> 编写so shared_mutex_safe_ptr<std::map<int,int>>而不是即可 safe_ptr<std::map<int,int>>。或者更好地编写contfree_safe_ptr<std::map<int,int>> ptr;使用更快的共享互斥量的方法,我们将在第二篇文章中对其进行描述。然后,使用 slock_safe_ptr(ptr)->find(5);或auto const& ptr_read = ptr; ptr_read->find(5); 称为只读共享锁-我们将在第三篇文章中介绍这些方式。
其他背景
可组合性和僵局。
由于我们在上文中将锁用于线程安全,因此我们的算法称为基于锁。
在无锁容器中没有死锁,基于事务性内存的算法方面是否真的还不错,并且现代RDBMS中是否存在死锁:MSSQL(基于锁的IL)和Oracle(多版本并发控制)?
无锁算法不允许一次原子地更改多个容器。RDBMS的死锁问题与基于锁的算法相同,它们通常通过锁超时或锁图来解决。并且C ++标准中新的事务安全部分不允许您安全使用复杂算法,