Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 使用一个内核的线程? 尝试使用VS 2013 C++与STD::Trase:这个测试对象打印,然后休眠,然后打印。创建它们的向量并调用它们,以便一次最多运行四个_Multithreading_C++11 - Fatal编程技术网

Multithreading 使用一个内核的线程? 尝试使用VS 2013 C++与STD::Trase:这个测试对象打印,然后休眠,然后打印。创建它们的向量并调用它们,以便一次最多运行四个

Multithreading 使用一个内核的线程? 尝试使用VS 2013 C++与STD::Trase:这个测试对象打印,然后休眠,然后打印。创建它们的向量并调用它们,以便一次最多运行四个,multithreading,c++11,Multithreading,C++11,它的工作原理与广告中的一样,四个线程同时运行,但不知何故,它似乎都在八个内核中的一个内核中执行 线程在别处声明为std::atomic int _tmain(int argc, _TCHAR* argv[]) { std::vector< testclass<int> > _vector; std::vector< testclass<int> >::iterator tc; int i; srand( (unsigned)time(NULL)

它的工作原理与广告中的一样,四个线程同时运行,但不知何故,它似乎都在八个内核中的一个内核中执行

线程在别处声明为std::atomic

int _tmain(int argc, _TCHAR* argv[])
{
std::vector< testclass<int> > _vector;
std::vector< testclass<int> >::iterator tc;
int i;

srand( (unsigned)time(NULL) );
threads = 0;
for (i = 0; i < 50; i++) {
    _vector.push_back(testclass<int>(i));
}
tc = _vector.begin();
while (tc != _vector.end()) {
    if (threads < FOUR_THREADS) {
        i = rand() % 5000;
        tc._Ptr->_value = i;
        std::thread t(&testclass<int>::calc, tc._Ptr);
        t.detach();
        tc++;
        threads++;
    }
}

return 0;
}
int-tmain(int-argc,_-TCHAR*argv[]
{
std::vector\u vector;
std::vector::迭代器tc;
int i;
srand((无符号)时间(NULL));
线程=0;
对于(i=0;i<50;i++){
_向量推回(testclass(i));
}
tc=_vector.begin();
while(tc!=\u vector.end()){
if(螺纹<四个螺纹){
i=兰特()%5000;
tc._Ptr->_值=i;
std::螺纹t(&testclass::计算,tc.\u Ptr);
t、 分离();
tc++;
线程++;
}
}
返回0;
}

calc的作用是什么?您是如何确定只使用了一个内核的?操作系统可以随心所欲地安排内核,如果没有太多的工作要做,而且有些内核已经睡着了,那么就不必麻烦唤醒它们了。用更多的工作来重新做这个测试,例如以1GA元素的平方根为例。两个旁白:一旦
完成,你不会遇到未定义的行为吗?您仍然有4个线程在运行,显然是指向在主线程退出时被破坏的数据。旁白2:偷看迭代器的内部有点奇怪。哎哟,原来的计算器只睡了几秒钟。因此,所有的CPU使用基本上都是交换线程的开销。然后我改变了calc来运行Erathothenes筛(拼写),bam的CPU使用率猛增到大约50%。