그래서 1.47.0의 부스트로 간단한 스피드 벤치를 만들려고 노력합니다. 하지만 1450 개 이상의 스레드를 만들려고하면 예외가 발생합니다. 그런 boost :: tread 제한을 제거하는 방법은 무엇입니까?부스트 스레드 제한을 변경하는 방법은 무엇입니까?
내 코드 샘플 :
#include <iostream>
#include <boost/thread.hpp>
#include <map>
#include <boost/thread.hpp>
#include <boost/thread/locks.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_int_distribution.hpp>
#include <boost/random.hpp>
#include <boost/timer.hpp>
class TestDs
{
public:
virtual bool containsKey(int key)=0;
virtual int get(int key)=0;
virtual int put(int key, int value)=0;
virtual int remove(int key)=0;
virtual int size()=0;
virtual const char* name()=0;
virtual void print()=0;
virtual void shutdown()=0;
};
class GeneralMap: public TestDs
{
private:
std::map<int,int> _ds;
mutable boost::mutex mut_;
public:
GeneralMap() {}
bool containsKey(int key) {
boost::mutex::scoped_lock lock(mut_);
if (_ds.find(key) != _ds.end())
{
return true;
}
else
{
return false;
}
}
int get(int key) {
boost::mutex::scoped_lock lock(mut_);
return _ds[key];
}
int put(int key, int value) {
boost::mutex::scoped_lock lock(mut_);
_ds.insert(std::pair<int, int>(key,value));
return key;
}
int remove(int key) {
boost::mutex::scoped_lock lock(mut_);
return _ds.erase(key);
}
int size() {
boost::mutex::scoped_lock lock(mut_);
return _ds.size();
}
const char* name() {
return "StdMap";
}
void print() {}
void shutdown() {}
};
int n;
boost::shared_mutex tests;
boost::shared_mutex results;
boost::timer timerForCaptureFame;
GeneralMap Ds;
void test(int i)
{
boost::shared_lock<boost::shared_mutex> lock_r(results);
boost::shared_lock<boost::shared_mutex> lock(tests);
Ds.put(i, 0);
if (Ds.containsKey(i))
{
Ds.get(i);
}
Ds.remove(i);
}
void result()
{
boost::upgrade_lock<boost::shared_mutex> lock(results);
boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
std::cout << std::endl << "test of " << Ds.name() << " complite;" << std::endl << "test performed on " << n << " items" << std::endl << "test duration: " << timerForCaptureFame.elapsed() << std::endl;
}
void create_tests(int n)
{
boost::upgrade_lock<boost::shared_mutex> lock(tests);
boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
boost::shared_lock<boost::shared_mutex> lock_r(results);
for(int i=0; i<n; i++)
{
boost::thread worker(test, i);
}
boost::thread worker_r(result);
timerForCaptureFame.restart();
return;
}
int main()
{
n = 1000;// if n == 1600 crushes.
create_tests(n);
std::cin.get();
return 0;
}
(Windows 테스트 완료) – Rella
왜 많은 스레드가 생성됩니까? – Maz
Maz에 동의합니다. 코어를 처리하는 것보다 스레드가 많을수록 스레드는 점점 유용하지 않습니다. 제정신의 응용 프로그램은 결코 1450 개의 스레드에 가까이 가지 않아야합니다. 심지어는 심지어 100도되지 않습니다. – Mranz