我已經編寫了下面的簡單代碼,它應該在CPU內核上平均加載4個線程。但htop
結果顯示,我有一個100%CPU佔用的線程和三個佔用25%CPU的線程。所以我懷疑,調用者線程可能有更多的CPU負載,我感到困惑。有人可以告訴我原因嗎?爲什麼這4個並行線程在CPU上的加載不均勻
#include <pthread.h>
#include <stdio.h>
void* print_ws(void* unused)
{
while(1)
fputc('W',stderr);
return NULL;
}//print_xs
void* print_zs(void* unused)
{
while(1)
fputc('Z',stderr);
return NULL;
}//print_xs
void* print_xs(void* unused)
{
while(1)
fputc('X',stderr);
return NULL;
}//print_xs
void* print_os(void* unused)
{
while(1)
fputc('O',stderr);
return NULL;
}
int main()
{
pthread_t t1, t2, t3;
// create a new thread. the new thread will run the print_xs
pthread_create(&t1, NULL, &print_zs, NULL);
pthread_create(&t2, NULL, &print_xs, NULL);
pthread_create(&t3, NULL, &print_ws, NULL);
print_os(NULL);
return 0;
}//main
如果你只是一個簡單的'替換每個'print_'程序的'fputc'電話會發生什麼;' - 也就是說,如果你將每個線程程序變成一個緊密的,硬編碼的,不可破解的循環?這將消除任何可能的鎖爭用。如果你嘗試這個,你可能只想爲你的初始測試啓動三個線程。分享並享受。 –
在這裏很好地工作。會說我觀察到所有四個線程的負載均勻分佈。 – alk