boost :: unique_lock / upgrade_to_unique_lock&& boost :: shared_lock可以同时存在吗?它让我担心

时间:2011-04-12 00:53:01

标签: boost concurrency locking c++11

我用boost :: upgrade_to_unique_lock / unique_lock&&进行了实验。 boost :: shared_lock,场景是:

  • 1个写线程,它所在的位置 boost :: unique_lock存在于 我在线程中的boost :: shared_mutex 写入全局 AClass

  • 3个读线程,每个都有 boost :: shared_lock与此相同 boost :; shrared_mutex,他们有一个 循环读取全局 AClass

我观察到所有线程同时持有锁(1个唯一,3个共享),而且它们都是 运行数据访问循环。

我的担心是 AClass 不是线程安全的,如果我可以在不同的线程中同时进行读/写,则读取可能会崩溃。即使它不是AClass,我们使用原始类型,读取它们肯定不会崩溃,但数据可能很脏,不是吗?

1 个答案:

答案 0 :(得分:3)

boost::shared_lock<boost::shared_mutex>(gmutex);

这不是“未命名的锁定”。这将创建一个临时shared_lock对象,锁定gmutex,然后销毁该临时shared_lock对象,解锁gmutex。您需要命名对象,使其成为变量,例如:

boost::shared_lock<boost::shared_mutex> my_awesome_lock(gmutex);

my_awesome_lock将在声明它的块的末尾被销毁,这就是你想要的行为。

相关问题