我一直听到关于并发编程的每一个地方.你们能否对它的内容有所了解以及c ++新标准如何促进这样做?
并发性是指您的代码同时执行多个操作.这通常使用显式"线程"完成,但还有其他可能性.例如,如果在代码中使用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线程库:C++ 0x中的简单多线程
我在博客上写了关于C++的多线程和并发性.我还写了一本关于这个主题的书:C++ Concurrency in Action.
当你说"c ++新标准如何促进"并发编程时,我假设你在谈论即将发布的(?)C++ 09标准.
目前以草稿形式出现的新标准支持以下有助于并发编程的项目:
原子类型和地址
一个线程类
thread_local存储(几个月前刚刚添加到草案标准中)
互斥(互斥类)
条件变量 - 这对Windows来说特别好,因为条件变量很难在Win32中正确实现.这意味着Microsoft最终应该至少在MSVC++运行时提供对条件变量的支持,因此很容易在WIn32上获得正确的条件变量语义.
也许这个视频可能会帮助你发光:-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/
并发性对于给定进程具有多个执行线程.截至今天,C++并不直接支持它.但是,存在几个将给定函数绑定到新执行线程的库.Unix标准是pthreads库.
C++ CSP2 - C++的简单并发
http://www.cs.kent.ac.uk/projects/ofa/c++csp/
CSP是基于适当的并发范例,而不是线程和锁以及所有其他方式,这些都是事后的想法.
(有关并发编程语言(也基于CSP),请参阅Occam-Pi)