Я работаю на многоядерном компьютере, а ОС - Ubuntu.
Я пишу код C ++ 11, как показано ниже:
thread t1([](){
while (true) {
lock_guard<mutex> lock(g_mutex);
}
});
thread t2([](){
while (true) {
lock_guard<mutex> lock(g_mutex);
}
});
t1.join();
t2.join();
Как видите, два нить, один замок. Таким образом, два потока будут назначены на два ядра, это точно.
Однако после выполнения этой программы я использую top
, чтобы проверить ее использование ресурса.
Я обнаружил, что загрузка процессора составляла около 180%.
Насколько я понимаю, только один поток может быть выполнен в любой момент из-за lock
. Так почему же он может использовать процессор более чем на 100%?