This question询问const
是否意味着线程安全,其中Herb Sutter的You don't know const
and mutable
对话很好。但是相反的方向呢?如果一个函数是线程安全的,它是否应该被标记为const
?如果不是,什么时候应该标记const
?在C++ 11/14中线程安全是否意味着const?
1
A
回答
1
不,这是完全可能的方法是非const
但仍然是线程安全的。它可以使用原子或锁来保护成员变量。例如,下面的count()
方法是线程安全的,同时修改m_count
成员变量。
#include <iostream>
#include <mutex>
class Counter
{
public:
Counter() : m_counterMutex(), m_counter(0) {}
unsigned int count() {
std::lock_guard<std::mutex> lk(m_counterMutex);
++m_counter;
return m_counter;
}
private:
std::mutex m_counterMutex;
unsigned int m_counter;
};
因为可见状态已经改变它不应该被标记为const
。让学员感到惊讶的是,他们可以将一个const Counter&
对象传递给一个函数,并且该对象的可见状态可以被该函数改变。
+0
这也是我结束的地方。看来谈话的真正教训是“const的东西应该在逻辑上是const并且是线程安全的”,而不仅仅是“const应该是线程安全的” –
相关问题
- 1. 线程同步是否意味着线程安全?
- 2. 不FileShare.ReadWrite意味着线程安全的书面文件在C#
- 3. 线程安全在PHP上下文中意味着什么?
- 4. “const void *”在memmove中意味着什么?
- 5. 什么是“|”意味着在C#编程?
- 6. “线程安全”真的意味着什么?
- 7. ILOnly = 0是否意味着C++/CLI?
- 8. is_numeric()是否意味着var对MySQL安全?
- 9. '!'是否意味着perl?
- 10. 在c#中设置enablessl = true意味着安全ftp
- 11. $是什么?是否意味着在Ruby?
- 12. 是什么;是否意味着在Ruby?
- 13. C++ 11 const - 我的代码是否线程安全?
- 14. 线程安全和`const`
- 15. Lwt是否意味着“轻量级线程”?
- 16. 什么是“安全性:?IsTrusted”在Java控制台意味着
- 17. 这是什么logcat线意味着
- 18. 什么是({});意味着在C++?
- 19. **在C/C++中意味着什么?
- 20. /(斜线)在CSS中意味着什么?
- 21. 是否Box.add()线程安全?
- 22. 是否mysql_insert_id线程安全?
- 23. C#委托是否线程安全?
- 24. C#数组是否线程安全?
- 25. @OneToOne是否意味着唯一性?
- 26. 正斜杠(/)是否意味着目录?
- 27. ASP.NET是否意味着ASP.NET WebForms?
- 28. << - 是否意味着红宝石?
- 29. 这是否意味着数据步骤?
- 30. “仅限邀请”是否意味着beta?
通过提供适当的同步机制,您可以轻松构建修改状态并且仍然是线程安全的函数。它不一定非得是'const',除非我完全误解了你的问题 – Alejandro