C++编写多线程程序

1.什么是多线程
线程,是操作系统能够进行运算调度的最小单位;
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术;
在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行;
具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。
2.多线程的优缺点
何时使用多线程技术,何时避免用它,是我们需要掌握的重要课题。多线程技术是一把双刃剑,在使用时需要充分考虑它的优缺点。
多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能:
(1)多线程技术使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;
(2)当前没有进行处理的任务时可以将处理器时间让给其它任务;
(3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;
(4)可以随时停止任务;
(5)可以分别设置各个任务的优先级以优化性能。
是否需要创建多个线程取决于各种因素。在以下情况下,最适合采用多线程处理:
(1)耗时或大量占用处理器的任务阻塞用户界面操作;
(2)各个任务必须等待外部资源 (如远程文件或 Internet连接)。
同样的 ,多线程也存在许多缺点 ,在考虑多线程时需要进行充分的考虑。多线程的主要缺点包括:
(1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。
(2)对线程进行管理要求额外的CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素。
(3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。
(4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。
3.C++11中使用多线程操作
C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是atomic,thread,mutex,condition_variable和future。(使用方法及详情可查询http://www.cplusplus.com/reference/thread/thread/?kw=thread)
atomic:该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另外还声明了一套 C 风格的原子类型和与 C 兼容的原子操作的函数。
thread:该头文件主要声明了 std::thread 类,另外 std::this_thread 命名空间也在该头文件中。
mutex:该头文件主要声明了与互斥量(mutex)相关的类,包括 std::mutex系列类,std::lock_guard, std::unique_lock, 以及其他的类型和函数。
condition_variable:该头文件主要声明了与条件变量相关的类,包括 std::condition_variable 和 std::condition_variable_any。
future:该头文件主要声明了 std::promise, std::package_task 两个 Provider 类,以及 std::future 和 std::shared_future 两个 Future 类,另外还有一些与之相关的类型和函数,std::async() 函数就声明在此头文件中。
资料整理来源:
https://www.cnblogs.com/ThinkWorld/archive/2010/12/26/1917364.html
https://blog.csdn.net/coolwriter/article/details/79883253
https://blog.csdn.net/qq_32716885/article/details/106400495

全部评论

相关推荐

3 7 评论
分享
牛客网
牛客企业服务