在两个线程之间共享内存,但数据结构的地址会发生变化

时间:2017-11-26 11:15:41

标签: multithreading c++11 promise

我在C ++中使用promises,并且拥有这个非常简单的程序。我创建了一个promise,并将其传递给线程函数引用

在线程内部,我创建一个字符串,然后将promise的值设置为该字符串。然后在主程序中,我使用未来检索promise的值。我很困惑为什么字符串的地址不会保持不变?理想情况下,它不应该在线程之间变化,因为它属于共享内存吗?

  void tfunc(promise<string> & prms) {
    string str("Hello from thread");
    cout << (void *)str.data() << endl;
    prms.set_value(str);
  }

  int main() {

    promise<string> prms;
    future<string> ftr = prms.get_future();
    thread th(&tfunc, ref(prms));
    string str = ftr.get();
    // This address should be the same as that inside the thread, right?
    cout << (void *)str.data() << endl;
    th.join();
    return 0;
  }

0 个答案:

没有答案