c++多线程编程——初探

c++多线程并发可以帮助我们挖掘CPU的性能,在我们的思想中,似乎程序都是顺序执行的。这样的结论是建立在:程序是单线程程序。(比如我们平时写的hello world程序)。

但是如果程序是多线程的。那么这个结论就不成立了。先上代码:

 1 #include <iostream>
 2 #include <thread>
 3 #include <chrono>
 4 
 5 void foo()
 6 {
 7     std::cout << "foo is startedn";
 8     std::this_thread::sleep_for(std::chrono::seconds(1));
 9     std::cout << "foo is donen";
10 }
11 
12 void bar()
13 {
14     std::cout << "bar is startedn";
15     std::this_thread::sleep_for(std::chrono::seconds(1));
16     std::cout << "bar is donen";
17 }
18 
19 int main()
20 {
21     std::cout << "starting first helper...n";
22     std::thread helper1(foo);
23     //std::cout << "thread helper1's ID:" << std::hex << helper1.get_id() <<std::endl;
24 
25     std::cout << "starting second helper...n";
26     std::thread helper2(bar);
27     //std::cout << "thread helper1's ID:" << std::hex << helper2.get_id() << std::endl;
28 
29     std::cout << "waiting for helpers to finish...n" << std::endl;
30     helper1.join();
31     helper2.join();
32     std::cout << "done!n";
33     system("pause");
34 }

程序中: #include <thread>包含了线程类thread,例如程序的22行,就创建了新的线程 helper1,也就是创建新的线程是通过创建线程对象来实现的。也就是:main函数开始,就建立了一个线程,但是这里 又新开辟了一个独立的线程,而26行所示代码则又开辟了一个新的线程helper2。我们来直观看一下,这个程序的结果是什么:

c++多线程编程——初探

可以看到,程序并没有在函数foo执行完毕后才执行bar,看起来更像是这两个线程是同时执行的(你可以去掉创建线程,然后就写普通的单线程调用实例来看看结果有何不同)

 在此,总结三点:

1.多线程编程可以使得程序能够并发执行

2.多线程创建是通过thread类创建新的对象,也就是一个线程对象就表示为一个新的线程。

3.一个线程被销毁之前(析构函数被调用之前),必须要先结束该线程,这里的方式是join()方法,该方法会阻塞后续线程的执行。(也就是该线程不执行完,后续无法执行,当然也可以采用非阻塞的方式detach)

关于对多线程并发编程,更多的需要参考下面这位博主的文章:https://www.cnblogs.com/wangguchangqing/p/6134635.html,这篇文章形象而细致的介绍了初步的多线程编程。

原文链接: https://www.cnblogs.com/shaonianpi/p/11428742.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++多线程编程——初探

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/301709

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午10:45
下一篇 2023年2月15日 下午10:46

相关推荐