由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++11多线程教程
相关主题
c++11 std::thread 和 openmp 那个额外开销少?C++ Software Engineer 工作求内推(Boston)
多线程 编程,process 和 thread 的一些问题。熟悉C++,向Windows 还是Linux 方向发展? thanks
我写的C++ ParallelForLoop,感兴趣的来下载测试Java 多线程:还需要好CPU?
怎么练习multi-threading,平常工作都是用Java框架多线程编程前景如何?
重复利用threads的问题c++下如何实现多线程?
怎么 kill 一个 thread 啊写thread safe程序现在也是程序员必须要掌握的了吧
[合集] 为什么多个线程生成的随机数是一样的?openMP or boost::thread (pthread) for multithreading ?
多线程有什么优化的方法?怎样提高C#计算程序的performance?
相关话题的讨论汇总
话题: thread话题: c++话题: pthread话题: std话题: 线程
进入Programming版参与讨论
1 (共1页)
w***g
发帖数: 5958
1
下面这个程序总结了C++11中最主要的多线程特性。
教程在注释里。国内的人不愿意读英文,我给他们写的。
版上有还没转C++11的也可以看看。
http://www.wdong.org/fun/thread-tutorial.cpp
p***o
发帖数: 1252
2
有书推荐吗?

【在 w***g 的大作中提到】
: 下面这个程序总结了C++11中最主要的多线程特性。
: 教程在注释里。国内的人不愿意读英文,我给他们写的。
: 版上有还没转C++11的也可以看看。
: http://www.wdong.org/fun/thread-tutorial.cpp

w***g
发帖数: 5958
3
就是为了让他们不需要看书就能上手才写的。

【在 p***o 的大作中提到】
: 有书推荐吗?
p***o
发帖数: 1252
4
刚注意到你是让国内的人看,挺清楚的。

【在 w***g 的大作中提到】
: 就是为了让他们不需要看书就能上手才写的。
d****i
发帖数: 4809
5
比起直接用pthread怎么样?

【在 w***g 的大作中提到】
: 下面这个程序总结了C++11中最主要的多线程特性。
: 教程在注释里。国内的人不愿意读英文,我给他们写的。
: 版上有还没转C++11的也可以看看。
: http://www.wdong.org/fun/thread-tutorial.cpp

w***g
发帖数: 5958
6
写起来更方便,而且portable。在linux上就是用pthread实现的。
比较不爽的是std::thread在高并发上还远远比不上goroutine。
C/C++有很多userland thread库,但是都有两个局限:
1. 大部分都不支持M-to-N的线程调度,没法发挥多核优势。
2. 所有的库在系统调用block时都没法自动切换线程。如果想要不被OS block,所有的
IO都必须通过thread库包装过的API调用。比如read就得用XXX_read。
问题1其实只是人力问题,是可以解决的。问题2彻底无解,
因为那么多第三方软件都已经用系统调用写了,最最最少也得全都重新编译一遍,
而且根本无法保证正确性。

【在 d****i 的大作中提到】
: 比起直接用pthread怎么样?
N******K
发帖数: 10202
7
我用std::thread写了一个parallel for
不知道和openmp比起来 有什么差异

【在 w***g 的大作中提到】
: 写起来更方便,而且portable。在linux上就是用pthread实现的。
: 比较不爽的是std::thread在高并发上还远远比不上goroutine。
: C/C++有很多userland thread库,但是都有两个局限:
: 1. 大部分都不支持M-to-N的线程调度,没法发挥多核优势。
: 2. 所有的库在系统调用block时都没法自动切换线程。如果想要不被OS block,所有的
: IO都必须通过thread库包装过的API调用。比如read就得用XXX_read。
: 问题1其实只是人力问题,是可以解决的。问题2彻底无解,
: 因为那么多第三方软件都已经用系统调用写了,最最最少也得全都重新编译一遍,
: 而且根本无法保证正确性。

w***g
发帖数: 5958
8
openmp也是pthread啊,性能应该是一样的。
你能贴下你的parallel for吗?我想学习学习。

【在 N******K 的大作中提到】
: 我用std::thread写了一个parallel for
: 不知道和openmp比起来 有什么差异

N******K
发帖数: 10202
9
等我吃玩午饭 贴到本版 供大家测试

【在 w***g 的大作中提到】
: openmp也是pthread啊,性能应该是一样的。
: 你能贴下你的parallel for吗?我想学习学习。

D***n
发帖数: 6804
10
回答你程序里的问题:
意味着停止当前thread,这个设计我持保留意见。
http://en.cppreference.com/w/cpp/thread/thread/operator%3D

// std::thread 用 = 进行赋值的时候实现的是move而不是copy
//
// 思考:如果=之前A已经和某线程关联了怎么办?
// 我不也不知道答案: )
// 最好的办法就是保证=以前线程对象是空的,或者干脆
// 不要用=操作,除非..

【在 w***g 的大作中提到】
: openmp也是pthread啊,性能应该是一样的。
: 你能贴下你的parallel for吗?我想学习学习。

相关主题
[合集] 为什么多个线程生成的随机数是一样的?熟悉C++,向Windows 还是Linux 方向发展? thanks
多线程有什么优化的方法?Java 多线程:还需要好CPU?
C++ Software Engineer 工作求内推(Boston)多线程编程前景如何?
进入Programming版参与讨论
D***n
发帖数: 6804
11
看了一眼文档,C++这个设计纯粹是一个warpper,真正生产上用我觉得至少要实现。
*)Extended thread attributes/class
*)Thread local storage
*)Thread pool/queue
*)Sync
从这一点来说,我觉得应该用现成的thread库,高层程序应该通过thread-safe的数据
结构和底层交流。
b*******s
发帖数: 5216
12
赞贡献,回头看看

【在 w***g 的大作中提到】
: 下面这个程序总结了C++11中最主要的多线程特性。
: 教程在注释里。国内的人不愿意读英文,我给他们写的。
: 版上有还没转C++11的也可以看看。
: http://www.wdong.org/fun/thread-tutorial.cpp

b*******s
发帖数: 5216
13
Boost好像有个伪线程是在阻塞在系统调用时可以切换。

【在 w***g 的大作中提到】
: 写起来更方便,而且portable。在linux上就是用pthread实现的。
: 比较不爽的是std::thread在高并发上还远远比不上goroutine。
: C/C++有很多userland thread库,但是都有两个局限:
: 1. 大部分都不支持M-to-N的线程调度,没法发挥多核优势。
: 2. 所有的库在系统调用block时都没法自动切换线程。如果想要不被OS block,所有的
: IO都必须通过thread库包装过的API调用。比如read就得用XXX_read。
: 问题1其实只是人力问题,是可以解决的。问题2彻底无解,
: 因为那么多第三方软件都已经用系统调用写了,最最最少也得全都重新编译一遍,
: 而且根本无法保证正确性。

b*******s
发帖数: 5216
14
方便了不是一点点

【在 d****i 的大作中提到】
: 比起直接用pthread怎么样?
w***g
发帖数: 5958
15
thread local storage编译器有支持。thread attribute的话在linux上需要用pthread
,可以弄但是很恶心。thread pool连boost都没个像样的实现。结论是C++标准库还远
远没到可以做稍微复杂点的系统的要求。
不过标准库引入thread毕竟是一个进步。不少程序可以不依赖外部库了。

【在 D***n 的大作中提到】
: 看了一眼文档,C++这个设计纯粹是一个warpper,真正生产上用我觉得至少要实现。
: *)Extended thread attributes/class
: *)Thread local storage
: *)Thread pool/queue
: *)Sync
: 从这一点来说,我觉得应该用现成的thread库,高层程序应该通过thread-safe的数据
: 结构和底层交流。

d*******r
发帖数: 3299
16
收藏了大牛的 blog
作为一个ML外行,就是想要找这样的总结:
http://www.wdong.org/wordpress/blog/2014/05/07/%E6%9C%BA%E5%99%

【在 w***g 的大作中提到】
: 下面这个程序总结了C++11中最主要的多线程特性。
: 教程在注释里。国内的人不愿意读英文,我给他们写的。
: 版上有还没转C++11的也可以看看。
: http://www.wdong.org/fun/thread-tutorial.cpp

D***n
发帖数: 6804
17
我自己的经验,通常不会直接用std::thread,而是用一个类把它给包起来,这个类里
面实现额外的各种thread属性,比如local storage,attribute之类。

pthread

【在 w***g 的大作中提到】
: thread local storage编译器有支持。thread attribute的话在linux上需要用pthread
: ,可以弄但是很恶心。thread pool连boost都没个像样的实现。结论是C++标准库还远
: 远没到可以做稍微复杂点的系统的要求。
: 不过标准库引入thread毕竟是一个进步。不少程序可以不依赖外部库了。

w******w
发帖数: 126
18
严重同意你这样的设计, 为了以后如果出现更好的thread的库,可以方便的替换。不
会因为绑定在这个标准的 thread后。你的代码release出去后, 只能是望洋兴叹。无
法改动了。
^_^

【在 D***n 的大作中提到】
: 我自己的经验,通常不会直接用std::thread,而是用一个类把它给包起来,这个类里
: 面实现额外的各种thread属性,比如local storage,attribute之类。
:
: pthread

G***l
发帖数: 355
19
Intel TBB怎么样?

【在 w***g 的大作中提到】
: 写起来更方便,而且portable。在linux上就是用pthread实现的。
: 比较不爽的是std::thread在高并发上还远远比不上goroutine。
: C/C++有很多userland thread库,但是都有两个局限:
: 1. 大部分都不支持M-to-N的线程调度,没法发挥多核优势。
: 2. 所有的库在系统调用block时都没法自动切换线程。如果想要不被OS block,所有的
: IO都必须通过thread库包装过的API调用。比如read就得用XXX_read。
: 问题1其实只是人力问题,是可以解决的。问题2彻底无解,
: 因为那么多第三方软件都已经用系统调用写了,最最最少也得全都重新编译一遍,
: 而且根本无法保证正确性。

t*******c
发帖数: 288
20
大哥,注释里的中文显示是乱码,怎么改过来啊?还是要改什么设置?
多谢了
相关主题
c++下如何实现多线程?怎样提高C#计算程序的performance?
写thread safe程序现在也是程序员必须要掌握的了吧多线程的程序设计有什么好书推荐? (转载)
openMP or boost::thread (pthread) for multithreading ?C++多线程的选择
进入Programming版参与讨论
g*********e
发帖数: 14401
21
openmp应该会维护自己的thread pool

【在 w***g 的大作中提到】
: openmp也是pthread啊,性能应该是一样的。
: 你能贴下你的parallel for吗?我想学习学习。

b*******s
发帖数: 5216
22
visitor pattern ?

【在 w******w 的大作中提到】
: 严重同意你这样的设计, 为了以后如果出现更好的thread的库,可以方便的替换。不
: 会因为绑定在这个标准的 thread后。你的代码release出去后, 只能是望洋兴叹。无
: 法改动了。
: ^_^

N******K
发帖数: 10202
23
这个应该怎么实现?

【在 g*********e 的大作中提到】
: openmp应该会维护自己的thread pool
g*********e
发帖数: 14401
24

比如在第一次用到parad flag的时候创造一堆thread。然后用完不关掉

【在 N******K 的大作中提到】
: 这个应该怎么实现?
p***o
发帖数: 1252
25
你要去看看tbb, parallel for之类的tbb里可以自动做负载均衡。

【在 N******K 的大作中提到】
: 这个应该怎么实现?
N******K
发帖数: 10202
26
也就省点创造thread的时间 在我的应用里面 这个时间和计算时间比起来 完全忽略

【在 g*********e 的大作中提到】
:
: 比如在第一次用到parad flag的时候创造一堆thread。然后用完不关掉

w***x
发帖数: 105
27
pthread是利器,我觉得已经足够。不理解c++弄这么个很不成熟的thread是想做什么。
比如怎么设置新thread的stack size?
w***g
发帖数: 5958
28
pthread vs std::thread
fd vs std::stream
char * vs std::string
C++库里每一个都是这样。一方面追求平台无关所以很多细节就照顾不到。
另一方面还追求性能,所以又不能做fancy的功能。好在标准库在大部分情况
下够用。不够的时候又很容易用底层的C和OS的库。
我看std::thread还是很好的,可以直接传一个lambda进去,出来的代码
干净多了。

【在 w***x 的大作中提到】
: pthread是利器,我觉得已经足够。不理解c++弄这么个很不成熟的thread是想做什么。
: 比如怎么设置新thread的stack size?

s******y
发帖数: 172
29
网页没了。有新的地址吗?

【在 w***g 的大作中提到】
: 下面这个程序总结了C++11中最主要的多线程特性。
: 教程在注释里。国内的人不愿意读英文,我给他们写的。
: 版上有还没转C++11的也可以看看。
: http://www.wdong.org/fun/thread-tutorial.cpp

o****p
发帖数: 9785
30
你可以直接看wdong网站啊,链接变了可是东西还在

【在 s******y 的大作中提到】
: 网页没了。有新的地址吗?
相关主题
在图像算法领域,纯java没戏,用java和c++混合编程很恶心多线程 编程,process 和 thread 的一些问题。
C++ 有没有像go routine/channel 一样的库/框架?我写的C++ ParallelForLoop,感兴趣的来下载测试
c++11 std::thread 和 openmp 那个额外开销少?怎么练习multi-threading,平常工作都是用Java框架
进入Programming版参与讨论
s******y
发帖数: 172
31
多谢提醒。找到了。

【在 o****p 的大作中提到】
: 你可以直接看wdong网站啊,链接变了可是东西还在
x****u
发帖数: 44466
32
C++11/14/17的多线程虽然强了不少但仍然是巨坑,强烈建议不要只看能做什么而是要
仿照某种更高层级语言的pattern做,比如java,js或者C#。
多线程目前看来最优雅我觉得是C#,async/await这种yield给进程内scheduler的写法
很严谨且易读。

【在 s******y 的大作中提到】
: 多谢提醒。找到了。
1 (共1页)
进入Programming版参与讨论
相关主题
多线程的程序设计有什么好书推荐? (转载)重复利用threads的问题
C++多线程的选择怎么 kill 一个 thread 啊
在图像算法领域,纯java没戏,用java和c++混合编程很恶心[合集] 为什么多个线程生成的随机数是一样的?
C++ 有没有像go routine/channel 一样的库/框架?多线程有什么优化的方法?
c++11 std::thread 和 openmp 那个额外开销少?C++ Software Engineer 工作求内推(Boston)
多线程 编程,process 和 thread 的一些问题。熟悉C++,向Windows 还是Linux 方向发展? thanks
我写的C++ ParallelForLoop,感兴趣的来下载测试Java 多线程:还需要好CPU?
怎么练习multi-threading,平常工作都是用Java框架多线程编程前景如何?
相关话题的讨论汇总
话题: thread话题: c++话题: pthread话题: std话题: 线程