многопоточность на двухъядерной машине?

У меня двухъядерный процессор, и, согласно объяснению, я могу использовать только 2 потока, но на самом деле я могу запускать более 2 потоков одновременно:

Вот копия объяснения:

Статический метод hardware_concurrency (), предоставляемый boost :: thread class, возвращает количество потоков, которые могут физически выполняться одновременно на основании базового номера ЦП или ядер ЦП. Вызов этой функции на часто используемом двухъядерная машина, возвращается значение 2. Это позволяет просто метод определения теоретического максимального количества потоков, которые должны использоваться одновременно данным многопоточным приложением.

Метод hardware_concurrency () в моем случае возвращает число 2, но эта программа использует 4 потока одновременно:

#include <iostream>
#include <boost\thread.hpp>

using namespace std;
using boost::thread;
using namespace boost::this_thread;
using boost::posix_time::seconds;

void f1()
{
    for(int i = 0; i < 10; ++i)
    {
        cout << i << endl;
        sleep(seconds(2));
    }
}

void f2()
{
    for(int i = 0; i < 10; ++i)
    {
        cout << i << endl;
        sleep(seconds(2));
    }
}

int main()
{
    // 4 threads are executed on dual core machine (no problem)
    thread thr1(f1);
    thread thr2(f2);
    thread thr3(f1);
    thread thr4(f2);
    cin.ignore();
    return 0;
}

Кто-нибудь может объяснить такое поведение?

7
задан crashmstr 10 January 2012 в 20:10
поделиться