多线程B. C++ ... 哪里开始?

我想开始学习多线程 C++. 我也在学习这个 Java 年。 在 Java, 如果我编写一个使用多线程的程序,它将在任何地方工作。 然而B. C++ 多线程不依赖于特定于平台的 API? 如果是这样,它似乎可以防止宽容。

我如何做多线程 C++, 不造成便携性问题? 是图书馆
http://www.boost.org/doc/libs/ ... .html
boost 好的解决方案?

顺便问一下,你如何以图书馆的形式实现多线程? 它不是由编译器完成的吗?
已邀请:

风见雨下

赞同来自:

如果您没有支持的编译器
http://www.justsoftwaresolutio ... .html
/例如,经济实惠 visual studio c++ 2010/, 使用线程 boost. /除非您使用已经支持流媒体的框架,否则这不是 - 否则,你不会问这个问题 -/. 这些流量 boost 事实上,在一个完全新的东西中成为标准 C++. 直到那个时间 C++ 他自己是一个无意识的溪流。

http://www.threadingbuildingblocks.org/
如果要探索并行编程的其他方面,您也可以对您感兴趣。

关于
Qt

: 如果您只需要支持流,那么它是一个完整的胸围。 他在编译的两端都有一个非常缓慢的时间。 这是一个非常深思熟虑的想法。 但不是像流动一样的官方标准 C++0x 经过 boost. 因此,我不会接受它作为第一选择。

快网

赞同来自:

在 C++ 是的,流依赖于平台。 然而,许多流式图书馆封装了各种平台上的流差异,提供单个 API 要编写Streaming应用程序,因此您不需要担心特定平台的细节。

Boost 流图书馆是一个非常好的解决方案。

我也建议检查
http://www.cs.wustl.edu/~schmidt/ACE-overview.html
.

郭文康

赞同来自:

让我们重新开始:

我如何在库中实现流媒体 ?

它不是那么至少不在 /纯的/ C++. 这个需要

语言

支持 /编译器只是销售/.

目前正在使用 2 事物:

assembly 一些部分的代码 /例如,在图书馆
pthread

/

特定的编译器指令 /取决于编译器和平台/

两者都很脆弱,需要大量的耐受性。 主要是它意味着很多零件
#ifdef

在测试编译器和目标架构的代码中,测试支持某些指令等。

这就是为什么它被认为是增加对流媒体的支持 C++0x.

如何制作多线程 ?

即使在选择库之前,您必须选择该方法。 存在 2 编程多线程应用程序的方法 /你可以结合它们/:

交流沟通

: 这意味着使用互斥锁,原子操作等......你可以使用
pthread

在平台上 Linux, 但我会推荐
Boost.Thread

/除此之外/ 为了其可占状性。

通过沟通分享

: 后来并适应分布式计算,它源于功能语言。 这意味着将消息从一个流传递到另一个流并不共享任何资源。 您可以使用
http://calvados.di.unipi.it/do ... about
或者
http://www.threadingbuildingblocks.org/
Intel, 作为。。而被知道
TBB

.

当然,你可以合并它们,但最好不要做。 就个人而言,我找到了描述 FastFlow 绝对令人惊叹:它鼓励没有阻止的编程。 此外,第二种方法的主要优点是它更好地适应分布式媒体中的多处理器编程和尺度。

首先,我建议关注他们中的任何一个并使用它创建多个应用程序。 当你感到舒适时,你可以尝试别人,但准备好起初开始,他们是如此不同。

君笑尘

赞同来自:

//This program explains how pthread works, here 5 thread are trying to update a global variable simultaneously but with locking synchronization in maintained
#include<iostream>
#include<pthread.h>
using namespace std ;

#define MAX_NO_THREAD 5

int global_sum = 0 ;
pthread_mutex_t lock ; //Declared global lock mutex object

void *print_fun/void *arg/
{
cout&lt;&lt;"\nThread id : "&lt;
<div class="answer_text">
此外,检查
[url=http://qt.nokia.com/]http://qt.nokia.com/[/url]
</div>
<div class="answer_text">
提供除此之外的提案 Boost, 我用 Pthreads /或者 Pthreads-Win32 在 Windows/. 这是非常的 do-it-yourself barebones 图书馆,但为您提供所需的一切,而且还有更多。 它非常简单 Boost, 你可以轻松找到包装 C++ 在他周围给你一个更高的抽象。
</div>
<div class="answer_text">
你也可以考虑 openmp
[url=http://openmp.org]http://openmp.org[/url]
. 许多编译器支持它,包括 MS, GCC/G++ 和 Intel. 虽然您没有收到对流的明确控制,但其并行性更高的抽象级别有时更有效 /在编码和执行期间/, 而代码更容易理解。 如果你工作,它不会帮助你 GUI, 但是对于可扩展的计算值得看。
</div>
<div class="answer_text">
图书馆流量 Boost, 可能是开始与之合作的最佳地点 C++. 为您提供流式结构,以及写真工作多线程应用所需的所有互斥锁和控制对象。
</div>
<div class="answer_text">
从 C++11, "Thread support library" 在标题下进入
[code]<thread>

.

有关更多信息,请参阅下面的链接。

https://en.cppreference.com/w/cpp/thread
http://www.cplusplus.com/reference/thread/
/
</thread></div>
<div class="answer_text">
如果您对此感兴趣以提高您对各种编程模型和语言技能的知识,那么图书馆 Boost 这将是一个很好的选择。 但是,我会考虑如何使用多线程创建任何生产应用程序 C++.

C++ 有时,在不增加多线程整体内存的显着复杂性的情况下,才难以实现正确性很难。 即使是最经验丰富的程序员也会同意多线程计划极难争辩并得出正确的结论。 即使是最简单的程序也可以在多线程时,在测试和调试时难以困难。

势在必行的语言如 C++ 或者 Java 或者 C# /使用可变变量,共享内存和互锁基元/警报/, 通常是创建多线程应用程序的最不实惠的方法。 通常有完全良好的单线程实现选项可以解决用户空间的大部分任务。 /不像 kernel 或内置/ 应用程序,包括多核机器。

如果您真的想创建可靠的应用程序 "multi-threaded", 我会建议您检查功能语言,如 Erlang, Haskell, F# 或者 Clojure.
</div>
</pthread.h></iostream>

窦买办

赞同来自:

此外,检查
http://qt.nokia.com/

知食

赞同来自:

提供除此之外的提案 Boost, 我用 Pthreads /或者 Pthreads-Win32 在 Windows/. 这是非常的 do-it-yourself barebones 图书馆,但为您提供所需的一切,而且还有更多。 它非常简单 Boost, 你可以轻松找到包装 C++ 在他周围给你一个更高的抽象。

帅驴

赞同来自:

你也可以考虑 openmp
http://openmp.org
. 许多编译器支持它,包括 MS, GCC/G++ 和 Intel. 虽然您没有收到对流的明确控制,但其并行性更高的抽象级别有时更有效 /在编码和执行期间/, 而代码更容易理解。 如果你工作,它不会帮助你 GUI, 但是对于可扩展的计算值得看。

诸葛浮云

赞同来自:

图书馆流量 Boost, 可能是开始与之合作的最佳地点 C++. 为您提供流式结构,以及写真工作多线程应用所需的所有互斥锁和控制对象。

石油百科

赞同来自:

从 C++11, "Thread support library" 在标题下进入
<thread>

.

有关更多信息,请参阅下面的链接。

https://en.cppreference.com/w/cpp/thread
http://www.cplusplus.com/reference/thread/
/
</thread>

石油百科

赞同来自:

如果您对此感兴趣以提高您对各种编程模型和语言技能的知识,那么图书馆 Boost 这将是一个很好的选择。 但是,我会考虑如何使用多线程创建任何生产应用程序 C++.

C++ 有时,在不增加多线程整体内存的显着复杂性的情况下,才难以实现正确性很难。 即使是最经验丰富的程序员也会同意多线程计划极难争辩并得出正确的结论。 即使是最简单的程序也可以在多线程时,在测试和调试时难以困难。

势在必行的语言如 C++ 或者 Java 或者 C# /使用可变变量,共享内存和互锁基元/警报/, 通常是创建多线程应用程序的最不实惠的方法。 通常有完全良好的单线程实现选项可以解决用户空间的大部分任务。 /不像 kernel 或内置/ 应用程序,包括多核机器。

如果您真的想创建可靠的应用程序 "multi-threaded", 我会建议您检查功能语言,如 Erlang, Haskell, F# 或者 Clojure.

要回复问题请先登录注册