【发布时间】:2010-08-19 14:51:39
【问题描述】:
是否有一个标准术语来区分在多线程环境中可以安全使用的对象(我的对象没有不受保护的静态成员)和在 MT 环境中可以安全使用的对象(可能是因为我在所有公共方法周围加锁)?
让我再补充一点:我有一个 C++ 库,它在多线程环境中使用总体上是安全的,但不是线程安全的。该库包含一个继承自 std::exception 的异常类。 what() 方法返回一个 char*。由于我坚持使用父级中定义的签名,因此我必须将内部内存返回给类,从而使该特定方法比库的其余部分更加不安全。我正在寻找一些在记录此方法时使用的标准术语。
【问题讨论】:
-
你的意思是,除了“线程安全”?
-
是的,因为我想区分 MT 环境中的安全和同时使用的安全。
-
并发使用对象和多线程使用对象有什么区别?
-
对于包含不受锁保护的静态成员的对象,从不同线程访问对象的不同实例是不安全的。对于在 MT 环境中安全的对象,例如 STL 容器,只要您不同时访问对象的同一个实例,就可以了。
-
好吧,这两种类型都不是线程安全的,但前者的安全性甚至不如平常,因为它的实例依赖于非安全的静态变量。
标签: multithreading