我一直听到有关并发编程的地方。 你们能否对它的内容以及c ++新标准如何促进这样做有所了解?
答案 0 :(得分:72)
并发性是指您的代码同时执行多项操作。这通常使用显式“线程”完成,但还有其他可能性。例如,如果在代码中使用OpenMP指令,那么支持OpenMP的编译器将自动为您生成线程。
线程是“执行线程”的缩写。在单线程C ++程序中,执行从main()开始,然后以顺序方式进行。在多线程程序中,第一个线程从main开始,但是应用程序可以从用户指定的函数启动其他线程。然后它们同时运行,或与原始线程并行运行。
在C ++中,使用std::thread
类启动0x线程:
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
我在my blog上用C ++写了关于多线程和并发的文章。我还写了一本关于这个主题的书:C++ Concurrency in Action。
答案 1 :(得分:17)
当你说“c ++新标准如何促进”并发编程时,我假设你在谈论即将发布的(?)C ++ 09标准。
目前以草稿形式出现的新标准支持以下有助于并发编程的项目:
答案 2 :(得分:5)
也许这段视频可能会为你提供一些亮点:-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/
答案 3 :(得分:5)
并发性为给定进程提供了多个执行线程。截至今天,C ++并不直接支持它。但是,存在几个将给定函数绑定到新执行线程的库。 Unix标准是pthreads库。
答案 4 :(得分:5)
C ++ CSP2 - C ++的简单并发
http://www.cs.kent.ac.uk/projects/ofa/c++csp/
CSP是基于适当的并发范例,而不是线程和锁以及所有其他方式,这些都是事后的想法。
(参见Occam-Pi的并发编程语言(也基于CSP))
答案 5 :(得分:3)
我的观点略有不同,具体针对编程范式的未来方向:
并发性是指编写程序,以便在硬件支持时可以同时执行多项操作。目前,大多数语言都有相当繁重和复杂的机制,允许程序员指定它(例如:具有手动同步的线程,OpenMP预处理器指令等)。
随着硬件的改进,它将在水平(更多核心)而不是垂直(更快的单核)上进行改进。这意味着应用程序需要具有“潜在并发性”才能使用“更快”的硬件进行扩展。语言目前正在努力发展以最好地支持这一点,成为未来发展的最佳语言。
C ++ 0x正在为“旧”编程并发方法添加更多内置支持。各种编译器供应商正在添加“新”方法,这些方法抽象了线程模型并允许对线程数等进行运行时决策(基于机器的硬件);特别是对于Microsoft,请参阅F#,并发运行时,并行扩展等。
希望有所帮助。
答案 6 :(得分:1)
这是理解并发编程的最佳文章:Concurrent Programming
阅读后,您将全面了解并发编程和C ++。
作为一个简短的总结,我们可以说并发编程是为了进行多任务处理。当一个程序被阻止时,它可以做其他事情。通常,我们在等待网络连接和处理I / O时被阻止。我们可以使用fork()
和线程库来促进并发编程。