并发编程c ++?

yes*_*aaj 46 c++ concurrency c++11

我一直听到关于并发编程的每一个地方.你们能否对它的内容有所了解以及c ++新标准如何促进这样做?

Ant*_*ams 73

并发性是指您的代码同时执行多个操作.这通常使用显式"线程"完成,但还有其他可能性.例如,如果在代码中使用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
Run Code Online (Sandbox Code Playgroud)

新的C++ 0x标准还支持:

  • 原型值和std::atomic<>类模板的操作,
  • 互斥用于数据保护(std::mutex,std::recursive_mutex等)
  • 锁定类以便于管理锁定生命周期(std::lock_guard<>,std::unique_lock<>)
  • std::lockstd::try_lock功能,以管理同时获取多个锁,而不会有死锁的风险
  • 条件变量以便于等待事件(std::condition_variable,std::condition_variable_any)
  • 期货,承诺和打包任务,以简化线程之间的数据传递,并等待值准备好.这解决了经典的"如何从线程返回值"的问题.
  • 本地静态对象的线程安全初始化
  • thread_local用于声明线程局部数据的关键字

我在devx.com上的文章中详细介绍了新的C++ 0x线程库:C++ 0x中的简单多线程

我在博客上写了关于C++的多线程和并发性.我还写了一本关于这个主题的书:C++ Concurrency in Action.


Mic*_*urr 17

当你说"c ++新标准如何促进"并发编程时,我假设你在谈论即将发布的(?)C++ 09标准.

目前以草稿形式出现的新标准支持以下有助于并发编程的项目:

  • 原子类型和地址
  • 一个线程类
  • thread_local存储(几个月前刚刚添加到草案标准中)
  • 互斥(互斥类)
  • 条件变量 - 这对Windows来说特别好,因为条件变量很难在Win32中正确实现.这意味着Microsoft最终应该至少在MSVC++运行时提供对条件变量的支持,因此很容易在WIn32上获得正确的条件变量语义.


Pau*_*han 5

并发性对于给定进程具有多个执行线程.截至今天,C++并不直接支持它.但是,存在几个将给定函数绑定到新执行线程的库.Unix标准是pthreads库.


Dyn*_*ite 5

C++ CSP2 - C++的简单并发

http://www.cs.kent.ac.uk/projects/ofa/c++csp/

CSP是基于适当的并发范例,而不是线程和锁以及所有其他方式,这些都是事后的想法.

(有关并发编程语言(也基于CSP),请参阅Occam-Pi)