我的用例就像。
我有一些普通字段,需要一个基本的线程安全getter和setter。
对于某些字段,需要使用自定义getter和setter。
这个问题的最佳方法是什么?
答案 0 :(得分:2)
标准库提供atomic
,用于简单的线程安全获取和值设置。 http://en.cppreference.com/w/cpp/atomic/atomic
请注意,正确的线程安全几乎总是涉及在std::atomic
中包含一些成员并将其称为一天的更多内容。
答案 1 :(得分:-1)
要直接回答这个问题,我认为没有一个好的答案。
与C#不同,C ++似乎没有内置于语言中的自动get
,set
生成,虽然可能有一种复杂的方式“有机地”(模板,也许? );您可能遇到的任何解决方案最终都可能成为IDE或实用程序中内置的某种工具,例如Eclipse或Code :: Blocks。
此外,C ++ 03形式的C ++通常不具有线程安全性;在以后的版本(C ++ 11及更高版本)中添加了对多线程,线程管理,异步和内存安全的支持,但由于C ++的本质,我不相信C ++本身就是线程安全的(至少现在)。
虽然std::atomic<type whatever>
可能是一个可行的选择,但您可能还需要记住它确实是语言的“附加”并且会产生时间成本,就像大多数其他具有多线程的构造一样(甚至处理器级别的原子操作也有些慢)。您可以使用互斥体的路径,但是我们再次进入多线程领域,这可能超出了您的问题范围。