我到处听到并发编程的话题。 你们能否简要介绍一下什么是并发编程以及C++新标准如何方便进行并发编程?
我到处听到并发编程的话题。 你们能否简要介绍一下什么是并发编程以及C++新标准如何方便进行并发编程?
并发是指你的代码同时执行多个任务。通常可以使用显式“线程”来实现,但也有其他可能性。例如,如果您在代码中使用OpenMP指令,支持OpenMP的编译器将自动为您生成线程。
线程是“执行线程”的缩写。在单线程C ++程序中,执行从main()开始,然后按顺序进行。在多线程程序中,第一个线程也是从main开始,但应用程序可能会启动其他由用户指定函数开始的线程,这些线程与原始线程并发或并行运行。
In C++0x,可以使用std :: thread
类启动线程:
void my_function()
{
// do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread
新的C++0x标准还支持:
std::atomic<>
类模板,std::mutex
, std::recursive_mutex
等)std::lock_guard<>
, std::unique_lock<>
)std::lock
和std::try_lock
函数,可同时管理获取多个锁定而不会有死锁风险,std::condition_variable
, std::condition_variable_any
)thread_local
关键字声明线程本地数据。我在devx.com上的文章中对新的C++0x线程库进行了更详细的概述:Simpler Multithreading in C++0x
我在我的博客上写关于C++多线程和并发方面的文章。我还正在撰写一本有关此主题的书:C++ Concurrency in Action。
std::thread
和std::async
中使用移动语义。 - Anthony Williams当你说“C++新标准如何促进并发编程”时,我假设你在谈论即将发布的C++09标准。
目前草案形式下的新标准支持以下有助于并发编程的内容:
并发是指在一个进程中具有多个执行线程。目前,C++不直接支持并发。但是,存在许多库可以将给定的函数绑定到新的执行线程上。Unix标准是pthreads库。
C++CSP2 - 为C++提供简单的并发性
http://www.cs.kent.ac.uk/projects/ofa/c++csp/
CSP是一种基于适当并发范式的编程方法,与线程、锁定和其他事后添加的方式不同。
(请参见Occam-Pi,这是一种基于CSP的并发编程语言)
我有一些略微不同的看法,特别是有关编程范例未来方向的:
并发编程是指编写程序时考虑到硬件支持多任务处理的能力。目前,大多数语言都具有相对繁重和复杂的机制,以便让程序员指定这种能力(例如:线程与手动同步,OpenMP预处理指令等)。
随着硬件的改进,它将朝着横向(更多核心)而非纵向(更快的单个核心)方向发展。这意味着应用程序需要具备“潜在并发性”才能随着“更快”的硬件进行扩展。语言目前正试图发展以最好地支持这一点,以成为未来开发的最佳语言。
C++0x正在增加更多内置支持“旧”方法来实现并发编程。各种编译器供应商正在添加“新”方法,该方法抽象出线程模型,并允许运行时决策线程数量等(根据计算机的硬件情况);尤其是针对Microsoft,可以看到F#、并发运行时、平行扩展等方式。
希望这有所帮助。
这是了解并发编程最好的文章:并发编程
阅读后,您将全面了解并发编程和C++。
简要概述,可以说并发编程是进行多任务处理。当程序被阻塞时,它可以做其他事情。通常我们在等待网络连接和处理I/O时会被阻塞。我们可以使用fork()
和线程库来促进并发编程。