【发布时间】:2021-12-24 11:02:05
【问题描述】:
我一直在寻找一种可靠的方法来计算要使用的程序可访问的线程数。我不想使用常量,并假设每个系统都有相同数量的可访问线程。我设计了这种试图弄清楚的方法。是好方法吗?
#include "pch.h"
#include <iostream>
#include <thread>
using namespace std;
struct list
{
void *data;
list *next;
list(list *x = nullptr)
{
data = x;
next = nullptr;
}
void add()
{
next = new list;
}
};
void sleepo(int xz)
{
for (int x = 0; x < 10000000; x++)
{
xz++;
}
}
int main()
{
int count = 1;
list *iterator = new list;
cout << "Attmepting to count threads..." << endl;
while (true)
{
try
{
iterator->data = new thread(sleepo, count);
iterator->add();
iterator = iterator->next;
count++;
}
catch(system_error)
{
break;
}
}
cout << "There are " << count << " threads." << endl;
}
【问题讨论】:
-
这个数字通常不是一个常数;它可能取决于任何给定时刻系统上可用的确切资源量(主要是内存)。仅仅因为您今天能够在一项测试中启动 5000 个线程,并不能保证您明天也能成功地做同样的事情。所以任何程序仍然必须能够处理创建线程失败的可能性。
-
另请注意,在所有线程加入或分离之前退出程序是错误的。
-
计算可以创建的线程数通常有用。对于 CPU 密集型工作,在 Linux 上使用
sched_getaffinity,并计算位数。对于基于线程的 I/O(ick!),只需创建所需数量即可;你很有可能会先达到其他限制。
标签: c++ multithreading system hardware