C++中怎么利用volatile关键字实现同步处理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Reason(原因)
In C++, unlike some other languages,volatiledoes not provide atomicity, does not synchronize between threads, and does not prevent instruction reordering (neither compiler nor hardware). It simply has nothing to do with concurrency.不像其他语言,在C++中volatile不会保证原子性,不会在线程之间同步,并且不会防止指令重排(无论是编译器还是硬件)。它没有为并发做任何事情。
Example, bad(反面示例):
Here we have a problem: This is perfectly good code in a single-threaded program, but have two threads execute this and there is a race condition onfree_slotsso that two threads might get the same value andfree_slots. That’s (obviously) a bad data race, so people trained in other languages may try to fix it like this:代码中存在一个问题:在单线程程序中,这是一段完美的代码,但是它会被两个线程执行,在free_slots上会发生数据竞争而导致两个线程可能得到同样的值和free_slots。这(显然)是一个坏的数据竞争,因此被其他语言训练过的人们可能会这样解决这个问题:
This has no effect on synchronization: The data race is still there!The C++ mechanism for this isatomictypes:这对同步处理没有任何作用:数据竞争还在!C++实现数据同步的机制atomic类型:
Now th 香港云主机e–operation is atomic, rather than a read-increment-write sequence where another thread might get in-between the individual operations.现在–操作是原子化的,而不是另一个线程可以插入操作的读-增量-写序列。
Alternative(其他选项)Useatomictypes where you might have usedvolatilein some other language. Use amutexfor more complicated examples.如果你曾经在其他语言中使用过volatile关键字,使用原子类型。更复杂的例子可以使用mutex。
See also(参照)(rare) proper uses ofvolatile(volatile的正确用法)https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#cp200-use-volatile-only-to-talk-to-non-c-memory)看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注开发云行业资讯频道,感谢您对开发云的支持。
相关推荐: css中text-emphasis属性的作用是什么
本篇内容主要讲解“css中text-emphasis属性的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css中text-emphasis属性的作用是什么”吧!就一般而言,我们所做的页面并非对于文学类用户…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。