C++ 并行编程c++;?

C++ 并行编程c++;?,c++,concurrency,c++11,C++,Concurrency,C++11,我一直在到处听说并发编程。 你们能不能给我们一些启示,以及C++新的标准如何促进同样的工作? < P>也许这个视频可能会帮助你们找到一些光:-BR> 并发是指给定进程有多个执行线程。到目前为止,C++并没有直接支持它。但是,有几个库将给定函数绑定到新的执行线程。Unix标准是pthreads库。并发性是指代码同时执行多个操作。这通常是通过显式的“线程”完成的,但也有其他的可能性。例如,如果您在代码中使用OpenMP指令,则支持OpenMP的编译器将自动为您生成线程 Thread是“执行线程”的缩

我一直在到处听说并发编程。
你们能不能给我们一些启示,以及C++新的标准如何促进同样的工作?

< P>也许这个视频可能会帮助你们找到一些光:-BR>
并发是指给定进程有多个执行线程。到目前为止,C++并没有直接支持它。但是,有几个库将给定函数绑定到新的执行线程。Unix标准是pthreads库。

并发性是指代码同时执行多个操作。这通常是通过显式的“线程”完成的,但也有其他的可能性。例如,如果您在代码中使用OpenMP指令,则支持OpenMP的编译器将自动为您生成线程

Thread是“执行线程”的缩写。在单线程C++程序中,执行从主()开始,然后按顺序进行。在多线程程序中,第一个线程从main开始,但是其他线程可以由从用户指定的函数开始的应用程序启动。然后这些线程并发运行,或与原始线程并行运行

在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\u mutex
    等)
  • 锁类便于管理锁的生命周期(
    std::lock\u guard
    std::unique\u lock
  • std::lock
    std::try_lock
    功能可管理同时获取多个锁,而不会出现死锁风险
  • 缓解等待事件的条件变量(
    std::condition\u variable
    std::condition\u variable\u any
  • 期货、承诺和打包任务简化线程之间的数据传递,并等待值准备就绪。这解决了经典的“如何从线程返回值”问题
  • 本地静态对象的线程安全初始化
  • 用于声明线程本地数据的
    thread\u local
    关键字
我在devx.com上的文章中对新的C++0x线程库进行了更详细的概述:

<>我在C++上写了多线程和并发。我也写了一本关于这个主题的书:

< P>当你说“C++新标准是如何促进”并发编程时,我假设你在谈论即将发布的C++ 09标准。 新标准目前的草案形式支持以下有助于并发编程的项目:

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

我的观点略有不同,具体到编程范例的未来方向:

并发是指编写程序,以便在硬件支持的情况下可以同时执行多项任务。目前,大多数语言都有相当繁杂的机制来允许程序员指定这一点(例如:具有手动同步的线程、OpenMP预处理器指令等)

随着硬件的改进,它将在水平方向(更多的核)而不是垂直方向(更快的单核)进行改进。这意味着应用程序需要具有“潜在并发性”,才能与“更快”的硬件一起扩展。语言目前正在努力发展,以最好地支持这一点,并在未来的发展中处于最佳语言的地位

C++0x正在为并发编程的“旧”方法添加更多的内置支持。各种编译器供应商正在添加“新”方法,这些方法抽象线程模型,并允许运行时决定线程数量等(基于机器硬件);特别是对于Microsoft,请参见F#、并发运行时、并行扩展等


希望对您有所帮助。

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

CSP是一个基于适当并发范例的系统,而不是线程、锁和所有其他事后附加的东西


(参见Occam Pi了解并发编程语言(也基于CSP))

这是理解并发编程的最佳文章:

阅读后,你会得到并发编程和C++的全貌。


作为一个简短的总结,我们可以说并发编程就是多任务处理。当程序被阻止时,它可以做其他事情。通常,我们在等待网络连接和处理I/O时被阻塞,我们可以使用(k)/>代码>线程库来促进并发编程。

POSIX标准(UNIX)可以有人解释我怎么可能有2个有争议的答案:是的,C++是并发语言(上文),而不是,并发是另一回事(这个)?谁错了?有人对这些特性写了一个很好的总结吗?我认为它们在很大程度上基于boost::thread,所以该文档和新标准之间应该没有太大区别。现在C++11已经发布了,可以添加什么吗?我可以想象我们现在可以使用移动语义吗?是的,你可以将移动语义与
std::thread
std::async
一起使用。你发布的链接返回404。文章:查看这些文章了解并发性1。2.3.如果并发计算对您来说是新的,请务必查看一些基本文章,如。