C++ 并发程序运行解决思路
C++ 并发程序运行
在C++一个程序中,一般都是顺序运行的,如A - B -C ,A运行完之后依次运行B,C,但是现在有一个问题来了,比如说B的运行时间比较长,如10秒,而B的运行条件是A运行完之后才能运行B,现在有很多个B没运行,在等着排队,而A只会运行一次,怎么能让B在A运行完之后,并列几个B来运行?如果用for循环的话,B还是顺序运行的,要10秒时间,怎么让B并列运行,程序运行时间缩短至5秒呢?
顺序 A - B-B-B-B...B -C
B-B-B...B
并列 A < > C
B_B-B...B
如上,怎么打到并列运行,求一个小例子。
------解决思路----------------------
起线程,起进程都可以。同时确定电脑的CPU是多核的
------解决思路----------------------
在运行完A得到需要的值后,
pThread(,,()funB1,..);
pThread(,,()funB2,..);
pThread(,,()funB3,..);
pThread(,,()funB4,..);
.......
funB1(LPARAM lpParam)
{
}
funB1(LPARAM lpParam)
{
}
funB2(LPARAM lpParam)
{
}
..................
------解决思路----------------------
------解决思路----------------------
多线程运行B就可以了啊
------解决思路----------------------
看起来又没有死锁问题 你直接用多线程就ok了啊~~~
------解决思路----------------------
http://blog.sina.com.cn/s/blog_4b4409c30100vmi2.html
------解决思路----------------------
开n个线程去处理b过程,当A处理完成的时候,post数据到b的线程,线程id 可以 i++%n 这样可以平均分配线程
等b完成后有post到c线程
网狐底层框架就是这么搞的
------解决思路----------------------
活多就多派点人手。
B多线程没有问题。
------解决思路----------------------
多线程这些涉及到具体操作系统,不过c++11已经支持多线程了。我觉得思路是并行处理B,那就开N个线程,高开始让这N个线程睡眠,此时不会耗cpu,等A完成后,唤醒这N个线程。至于具体怎么做,要看是linux平台还是win,每个平台都有相应实现。
------解决思路----------------------
C++11中提供的线程类不是太好用,如果你在WIN32平台,就直接用PPL实现吧,很容易,需要两个东西:等待一个任务执行完成后再执行下一个任务和paralle_for_each
在C++一个程序中,一般都是顺序运行的,如A - B -C ,A运行完之后依次运行B,C,但是现在有一个问题来了,比如说B的运行时间比较长,如10秒,而B的运行条件是A运行完之后才能运行B,现在有很多个B没运行,在等着排队,而A只会运行一次,怎么能让B在A运行完之后,并列几个B来运行?如果用for循环的话,B还是顺序运行的,要10秒时间,怎么让B并列运行,程序运行时间缩短至5秒呢?
顺序 A - B-B-B-B...B -C
B-B-B...B
并列 A < > C
B_B-B...B
如上,怎么打到并列运行,求一个小例子。
------解决思路----------------------
起线程,起进程都可以。同时确定电脑的CPU是多核的
------解决思路----------------------
在运行完A得到需要的值后,
pThread(,,()funB1,..);
pThread(,,()funB2,..);
pThread(,,()funB3,..);
pThread(,,()funB4,..);
.......
funB1(LPARAM lpParam)
{
}
funB1(LPARAM lpParam)
{
}
funB2(LPARAM lpParam)
{
}
..................
------解决思路----------------------
#include <future>
A();
std::async(std::launch::async, B);
std::async(std::launch::async, B);
//...
C()
------解决思路----------------------
多线程运行B就可以了啊
------解决思路----------------------
看起来又没有死锁问题 你直接用多线程就ok了啊~~~
------解决思路----------------------
http://blog.sina.com.cn/s/blog_4b4409c30100vmi2.html
------解决思路----------------------
开n个线程去处理b过程,当A处理完成的时候,post数据到b的线程,线程id 可以 i++%n 这样可以平均分配线程
等b完成后有post到c线程
网狐底层框架就是这么搞的
------解决思路----------------------
活多就多派点人手。
B多线程没有问题。
------解决思路----------------------
多线程这些涉及到具体操作系统,不过c++11已经支持多线程了。我觉得思路是并行处理B,那就开N个线程,高开始让这N个线程睡眠,此时不会耗cpu,等A完成后,唤醒这N个线程。至于具体怎么做,要看是linux平台还是win,每个平台都有相应实现。
------解决思路----------------------
C++11中提供的线程类不是太好用,如果你在WIN32平台,就直接用PPL实现吧,很容易,需要两个东西:等待一个任务执行完成后再执行下一个任务和paralle_for_each