C++实现简单的并发(C++运行并发for循环)

4 篇文章 2 订阅

在学校学过c++的一点皮毛,现在发现,stl是真心难。。不多说,进正题,C++如何运行并发的for循环。

需要用到并发的地方一般都涉及到性能,并发分为多线程并发和多进程并发。多线程并发一般来说系统的开销比多进程的要小,而多进程的整体性能一般是由于多线程的。

C++实现多线程并发

#include <iostream> 
#include <vector> 
#include <thread> 

typedef void (*func)(); 

int atom; 

void f1() { atom=1;printf("atom=%d\n",atom); } 
void f2() { atom=2;printf("atom=%d\n",atom); } 
void f3() { atom=3;printf("atom=%d\n",atom); } 

int main() 
{ 

    std::vector<func> func_vec = { &f1, &f2, &f3 }; 
    std::vector<std::thread> thread_vec; 

    for (func& f : func_vec) 
     thread_vec.emplace_back(std::thread(f)); 
    for (std::thread& t : thread_vec) 
     t.join(); 
    return 0;
} 

个人倾向于用SourceInsight来看C++代码,写简单的C++代码直接在C++ shell跑就可以了,百度的C++在线编译不靠谱。可以看到上面的代码里面写了三个很简单的函数,希望这三个输出可以并发执行。所以创建了两个vector类型的变量,最后用std::thread.join()来实现并发。官方介绍如下:join函数在线程执行完成后返回None,这会使此函数返回的时刻与线程中所有操作的完成同步:这会阻止调用此函数的线程的执行,直到构造中调用的函数返回(如果尚未返回)。调用此函数后,线程对象变为不可连接,可以安全销毁。打比方我执行了100个这样的join,那么这100个线程会并发执行,但是像上面想要执行return 0的话需要等所有的线程执行完。

并发执行就没法确定顺序,我们可以多次运行查看结果是否符合预期。

可以看到上面运行结果是不同的,所以简单的多线程并发就实现了。但是这样的代码运行在c++工程里面是比较危险的,一般只是测试时用,因为涉及到线程安全和可重入等等。

C++实现多进程并发

这个准确的来说不是用C++实现的,可以用C++的fork实现,但是麻烦。在shell脚本里面

bash command1 &
bash command2 &

这个如果和for循环一起用加上wait函数,避免产生僵尸进程。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值