用COW实现的std::string会不会有线程问题?
本版的一个帖子中说到:
微软在vc2003之后好像都不再使用cow来实现字符串类了
多线程, 有可能会带来严重的后果, 随便举例吧(代码未验证只为展示问题), 假如一个COW实现的std::string, 如下代码:
void test_thread(std::string& str) { // 这里使用或修改str时, 因std::string中并没有锁(只有引用计数, 但是保证不了buffer的同步访问)... } { ... std::string orig = "hehe"; std::string clone = orig; boost::thread(&test_thread, boost::ref(clone)); // 这里修改orig. }