V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liukecai8
V2EX  ›  C

OpenMP task 学习求助

  •  
  •   liukecai8 · 2018-04-20 14:24:03 +08:00 · 1488 次点击
    这是一个创建于 2443 天前的主题,其中的信息可能已经有所发展或是发生改变。

    此处需要使用 task 来进行中序二叉树遍历,期望输出结果是 A=B/C+D*E-F 但是实际输出却不对,求助

    #include <stdio.h>
    #include <omp.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct BitNode
    {
    	char data;
    	struct BitNode *lchild,*rchild;
    } BitNode;
    
    void midorder(BitNode *p)
    {
    	if(p->lchild) 
    	{
    #pragma omp task
    		midorder(p->lchild);
    	}
    #pragma omp taskwait
    	{
    		printf("%c", p->data);
    	}
    	if(p->rchild)
    	{
    #pragma omp task
    		midorder(p->rchild);
    	}
    }
    
    int main (int argc, char **argv)
    {
    	BitNode *tree;
    	BitNode a,b,c,d,e,f,eq,mi,mu,di,pl;
    	a.data='A';a.lchild=0;a.rchild=0;
    	b.data='B';b.lchild=0;b.rchild=0;
    	c.data='C';c.lchild=0;c.rchild=0;
    	d.data='D';d.lchild=0;d.rchild=0;
    	e.data='E';e.lchild=0;e.rchild=0;
    	f.data='F';f.lchild=0;f.rchild=0;
    	eq.data='=';eq.lchild=&a;eq.rchild=&mi;
    	mi.data='-';mi.lchild=&mu;mi.rchild=&f;
    	mu.data='*';mu.lchild=&di;mu.rchild=&e;
    	di.data='/';di.lchild=&b;di.rchild=&pl;
    	pl.data='+';pl.lchild=&c;pl.rchild=&d;
    	tree=&eq;
    	omp_set_num_threads (4);
    #pragma omp parallel
    #pragma omp single
    		midorder(tree);
    	printf("\n");
    }
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2721 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:10 · PVG 20:10 · LAX 04:10 · JFK 07:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.