【发布时间】:2012-07-31 06:55:43
【问题描述】:
我有一个问题,我的线程代码中有这个指针,它们正在那里被修改,但是当它返回到主代码时,变化不是这样的:
线程
void threaded_function(Model_factory &mf, ppa::Node *root) { // threads management
try { // n try...
主要
int main(int argc, char *argv[]) { ...
我主要创建一个节点根,然后在线程中为节点提供序列,并有一个 bool 更改为 true,如:
ppa::Node *root;
在线程正在工作(一个线程组)中,我可以根据需要获取并设置该布尔值,但是当线程组以 join all 结束时(这是 boost),指针根在这一行上给我 0
cout << root->has_sequence() << endl;
在这继续之后,节点又被填充了一些东西,所以我想问的是为什么我的节点指针没有反映线程中的变化,是设计还是我错了(可能是第二个)以及什么我应该做一个全局根节点来解决我的问题,但是为什么呢?
【问题讨论】:
-
你能把它减少到一个 minimal 但可能重现问题的完整示例吗?我会尝试运行和研究更小的东西,但目前它太大了,缺少
main()并且依赖于我们看不到的外部事物。您是否尝试过在 hlgrind 之类的工具中运行它? -
是的,我知道很多,问题是我不知道比赛条件在哪里,不,我没试过我会的,不,因为我不知道我不知道我想我可以减少它。
-
我已经阅读了它,但不幸的是不知道原因在哪里,我认为我不能。
-
main 是不需要的,它有很多额外的东西,线程在那里。
-
这是很多代码。存在大量线程检查器和分析器 - 只需使用一个,例如英特尔线程检查器或 Sun/Oracle 线程分析器。
标签: c++ multithreading pointers boost