【发布时间】:2012-12-14 02:17:15
【问题描述】:
我一直在尝试熟悉 C++11 中的 std::thread 库,但遇到了一个绊脚石。
最初我来自 posix 线程背景,我想知道如何在构造之前设置 std::thread 的堆栈大小,因为我似乎找不到执行此类任务的任何参考。
使用 pthreads 设置堆栈大小如下:
void* foo(void* arg);
.
.
.
.
pthread_attr_t attribute;
pthread_t thread;
pthread_attr_init(&attribute);
pthread_attr_setstacksize(&attribute,1024);
pthread_create(&thread,&attribute,foo,0);
pthread_join(thread,0);
在使用 std::thread 时是否有类似的情况?
我一直在使用以下参考:
【问题讨论】:
-
你可以获得原生处理程序并设置堆栈大小吗? en.cppreference.com/w/cpp/thread/thread/native_handle
-
@billz 创建线程后为时已晚。
-
@Billy:在很多情况下,人们可能希望为线程池创建多个线程,并假设线程所需的所有数据/内存都将在外部,因此可以将堆栈设置为小 - 本质上足以容纳任何电话或代码。
-
@BillyONeal 我正在开发一个需要大量工作线程的程序,这些线程不需要很大的堆栈大小(在 500 kb 堆栈/工作线程上运行它们),标准: :thread 默认堆栈大小为 8 兆字节/线程。如果我想要 10 个工作线程,那就是使用 std::thread 的 80 MB ram,或者使用 pthreads 的 5 MB ram ..
-
@BillyONeal 该死的,看来你是对的,我写了一些 code 来测试它,然后安装了一个最小的 debian 9 amd64,内核为 4.9.110,g++ 6.3.0,和 152 MB ram和 0 交换(这似乎几乎是在不调整
initial ramdisk的情况下启动的最低 debian 启动 - 介于 140 和 152MB 内存之间)以及模式 1(具有 8MB 堆栈的 std::thread)和模式 2(pthread具有 512 kb 堆栈)能够在失败之前运行 恰好 700 个线程!很酷 - 在启动过程中它需要 ~152 MB,但在启动它的 65MB 内存后,不幸的是
标签: c++ multithreading c++11 pthreads