[转帖]通道变量可用于两个以上的平行语句问题
我有一个DJ KIT板,代码如下:
int main(){
streaming chan c_mix_out;
streaming chan c_out;
par
{
on stdcore[0]:
{
func1(c_mix_out);
}
on stdcore[0]:
{
func2(c_mix_out);
}
on stdcore[0]:
{
func3(c_mix_out);
}
}
}
但是编译器说这个错误:`c_mix_out' used in more than two parallel statements;
所以我尝试指定c_mix_out到别的变量和想要用像下面:
指定 c_out <: c_mix_out ;
但是编译器说:incompatible types in output
有什么想法?我哪里错了?
回答:
通道用于在两个逻辑核间通信。你不能有相同的通道结束超过连个以上的逻辑核之间的连接。如果你需要从一个核心到多个逻辑核心的交流的信息,你需要有一个核心之间单独的通道。在超过两个逻辑核间你不能使用相同通道来连接,因为它违反并行使用规则。通过下面链接你会发现更多关于通道的信息:
回复:
谢谢你的回答,但是怎么样在没个核之间拥有分别的通道?
你可以解释下代码吗?
谢谢你
回答:
考虑到使用一个三核系统,在那儿你必须传达相同的信息到其他两个核
void core1(chanend c1, chanend c2)
{
unsigned data=0;
while(1)
{
c1 <:data;
c2 <:data;
data ++;
}
}
void core2(chanend c1)
{
while(1)
{
c1:> data;
printint(data);
}
}
void core3(chanend c2)
{
while(1)
{
c2:> data;
printint(data);
}
}
int main()
{
chan c1,c2;
par
{
core1(c1,c2);
core2(c1);
core3(c2);
}
return 0;
}
发表时间:2014年8月5日21:52:45