在visual studio 2012中管理c ++ 11线程

Gri*_*yan 0 c++ multithreading visual-studio c++11 visual-studio-2012

我在vs2012中编写了一个正确工作的多线程代码.令我感到惊讶的是,我分离了近10000个线程,它没有任何问题.显然,线程数量不能同时处理,因此其中一些线程暂停,直到其他线程工作.

我想知道在vs2012中是否存在一些选项来设置允许同时工作的最大线程数量.我特别要求在线程切换时不要浪费太多时间.
此外,我想管理允许我的线程使用的内存总量.

提前致谢.

sya*_*yam 6

限制产生的线程数是你的职责.

至于他们使用的内存,除了堆栈(我将回到下面),它与你的程序的其余部分完全没有区别.实际上,这是使用线程而不是多个进程(fork用Unix术语)的全部要点:它们共享相同的内存.由于操作系统将线程所做的任何分配视为来自您的进程(而不是来自特定线程),因此您无法人为地限制单个线程的内存使用.

关于分配给每个线程的堆栈内存:你可能想要阅读关于这个主题的答案(特别是第一点),希望你会发现尝试减少线程的堆栈大小是没有意义的.

总而言之,线程与程序的任何其他部分一样:您不能对其数量或允许分配的内存量(在您的机器可以处理的范围内)设置硬限制, 当然).同样,作为程序员,您的工作是正确管理资源,而不是编译器的工作,而不是操作系统的工作.

你想要少于10000个线程?然后就是不要在第一时间产生它们.你希望他们使用更少的内存?然后不要首先分配那个内存.您所要做的就是在代码中加入必要的安全措施.