c#中如何对循环次数可变的循环进行并行计算的改写

oulalal 2018-07-04 03:11:35
例如
for(int i=0;i<b;i++)
{
...
if(满足条件)
b++;
...
}
对于这种如何进行改写呢?请大佬给尽量详细的伪代码,
...全文
530 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
oulalal 2018-07-07
  • 打赏
  • 举报
回复
引用 22 楼 sp1234 的回复:
i=6、然后 i=3 -----> i<6、然后 i<3

写出基本的可行的程序吧。不要考虑并发。程序设计能力需要自己学,不是靠从 csdn 抄的。

好的吧,我自己再研究研究…
  • 打赏
  • 举报
回复
i=6、然后 i=3 -----> i<6、然后 i<3

写出基本的可行的程序吧。不要考虑并发。程序设计能力需要自己学,不是靠从 csdn 抄的。
  • 打赏
  • 举报
回复
引用 18 楼 oulalal 的回复:
[quote=引用 15 楼 sp1234 的回复:]
除了你并没有表达出来实际计算内容的”同时计算的6“以外,整个流程都是顺序的。你先”同时计算b=6“,过一会儿”同时计算b=3“........这就是顺序处理思路。所以你的描述中,似乎只能描述顺序,不会描述并行/并发。所以不能理解具体内容。

例如这个图,23456是可以同时计算的,计算结束后,789和10 11 12可以同时计算,整个过程是一个顺序过程,同时里面的小计算有可以并行的成分,请问这种有没有什么方法解决,以提高整个运行速度[/quote]

这就根本不是你在顶楼所贴的 for 循环的流程概念。就算是这个递归子树搜索,你能用一个 for 循环靠变量 i 来控制所谓的 i=6、然后 i=3 啊?所以顺序流程尚且不会写,怎么写并发多线程程序呢?你先把顺序流程的控制逻辑代码写出来,擦能开始考虑并发。
oulalal 2018-07-07
  • 打赏
  • 举报
回复
引用 19 楼 jhone99 的回复:
如果要同时运行,那就要用多线程,但是你一定要把逻辑整理明白,别陷进去

我现在就很愁这个逻辑应该怎么组织
jhone99 2018-07-06
  • 打赏
  • 举报
回复
如果要同时运行,那就要用多线程,但是你一定要把逻辑整理明白,别陷进去
oulalal 2018-07-06
  • 打赏
  • 举报
回复
引用 15 楼 sp1234 的回复:
除了你并没有表达出来实际计算内容的”同时计算的6“以外,整个流程都是顺序的。你先”同时计算b=6“,过一会儿”同时计算b=3“........这就是顺序处理思路。所以你的描述中,似乎只能描述顺序,不会描述并行/并发。所以不能理解具体内容。

例如这个图,23456是可以同时计算的,计算结束后,789和10 11 12可以同时计算,整个过程是一个顺序过程,同时里面的小计算有可以并行的成分,请问这种有没有什么方法解决,以提高整个运行速度
oulalal 2018-07-06
  • 打赏
  • 举报
回复
引用 12 楼 qq_25219331 的回复:
我瞎写一下啊 不知可不可以。。

void a(int I, int B){
for(int i = I; i < B; i++){
//TODO
if(condition){
//TODO
a(i + 1, B++);
return;
}
}
}

这个是不是递归啊?递归怎么转并行啊
oulalal 2018-07-06
  • 打赏
  • 举报
回复
引用 13 楼 hanjun0612 的回复:
这个意思???
static void Main(string[] args)
{
int a = 1;
for (int i = 0; ;i++)
{
if (i < a)
{
Console.WriteLine(a);
a = 6;
}
else
break;
}

Console.ReadLine();
}

啊对,就是这种,想问这种怎么转并行~
  • 打赏
  • 举报
回复
if(满足条件)
{
lock(staticObj)
{
if(满足条件){
}
}
}
oulalal 2018-07-05
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
while
{
}do();

了解下

请问这两个如何进行并行计算的改写呢?
  • 打赏
  • 举报
回复
for(;;)
{//注意小括号内条件都是空的
break;
}

//了解下
  • 打赏
  • 举报
回复
while
{
}do();

了解下
  • 打赏
  • 举报
回复
除了你并没有表达出来实际计算内容的”同时计算的6“以外,整个流程都是顺序的。你先”同时计算b=6“,过一会儿”同时计算b=3“........这就是顺序处理思路。所以你的描述中,似乎只能描述顺序,不会描述并行/并发。所以不能理解具体内容。
  • 打赏
  • 举报
回复
引用 9 楼 oulalal 的回复:
[quote=引用 8 楼 sp1234 的回复:]
你这个流程纯粹是每一步都要顺序的思路,根据什么“并行”?

是这样的,例如,刚开始b=1,第一次计算结束后,b=6,这6个是可以同时计算的,类似于多叉树的感觉。想问一下这种如何进行并行运算?[/quote]

"同时计算的“看不出来是怎么计算?
正怒月神 2018-07-05
  • 打赏
  • 举报
回复
这个意思???
static void Main(string[] args)
{
int a = 1;
for (int i = 0; ;i++)
{
if (i < a)
{
Console.WriteLine(a);
a = 6;
}
else
break;
}

Console.ReadLine();
}
Vito1993 2018-07-05
  • 打赏
  • 举报
回复
我瞎写一下啊 不知可不可以。。

void a(int I, int B){
for(int i = I; i < B; i++){
//TODO
if(condition){
//TODO
a(i + 1, B++);
return;
}
}
}
oulalal 2018-07-05
  • 打赏
  • 举报
回复
引用 6 楼 starfd 的回复:
if(满足条件)
{
lock(staticObj)
{
if(满足条件){
}
}
}

这个我去试一下…
oulalal 2018-07-05
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
如果条件一直满足,将是死循环
请把逻辑先弄清楚了

条件不是一直满足的,不会是死循环的
oulalal 2018-07-05
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
你这个流程纯粹是每一步都要顺序的思路,根据什么“并行”?

是这样的,例如,刚开始b=1,第一次计算结束后,b=6,这6个是可以同时计算的,类似于多叉树的感觉。想问一下这种如何进行并行运算?
  • 打赏
  • 举报
回复
你这个流程纯粹是每一步都要顺序的思路,根据什么“并行”?
加载更多回复(3)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧