Почему два потока с одной блокировкой могут использовать процессор более чем на 100%? - PullRequest
3 голосов
/ 15 января 2020

Я работаю на многоядерном компьютере, а ОС - 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%?

...