线程结æŸåŽåŒæ­¥

时间:2011-02-25 15:22:46

标签: c++ multithreading c++11 race-condition

由于this问题的一部分未得到解决,我将其作为一个å•ç‹¬çš„问题:

#include<iostream>
#include<thread>
using namespace std;

void f2(double* ret) {
   *ret=5.;
}

int main() {
   double ret=0.;
   thread t2(f2, &ret);
   t2.join();
   cout << "ret=" << ret << endl;   
}

这个节目数æ®æ˜¯å¦å…费比赛? 对于新的C ++内存模型,是å¦æœ‰ä»»ä½•ä¿è¯ä»Žçº¿ç¨‹ret访问å˜é‡t2并且线程main是åŒæ­¥çš„?

我的æ„æ€æ˜¯ï¼Œå¦‚果程åºåœ¨åŒä¸€æ ¸å¿ƒä¸Šæ‰§è¡Œï¼Œå¾ˆæ˜Žæ˜¾t2å’Œmain的访问ä¸ä¼šå‘生冲çªã€‚
但是如果t2å’Œmain在ä¸åŒçš„核心上执行会怎么样? 在main继续执行之å‰ï¼Œæ˜¯å¦æœ‰ä¿è¯æ ¸å¿ƒç¼“存会åŒæ­¥ï¼Ÿ

如果有人能æ供相åŒçš„å‚考资料,我会很感激。

谢谢。

1 个答案:

答案 0 :(得分:5)

您的计划å…è´¹å‚加数æ®ç«žèµ›ã€‚ [thread.thread.member] / p5æ述了带有åŒæ­¥æ®µè½çš„join():

åŒæ­¥ï¼šç”±* this表示的线程的完æˆåŒæ­¥ 用(1.10)相应的æˆåŠŸjoin()返回。 [注æ„:*上的æ“作ä¸åŒæ­¥ã€‚ -endnote]

(1.10)指的是[intro.multithread],它是一个太长而无法引用的部分,但在æžå…¶è¯¦ç»†çš„情况下定义了短语“与...åŒæ­¥â€ã€‚

最新的工作è‰æ¡ˆæ˜¯N3225。

相关问题