我想打印主線程中的奇數和新線程中的偶數。我試圖編寫一個程序,但它只打印奇數而不是偶數。我試圖尋找線索,以找到什麼是錯的,但沒有找到任何。無法打印偶數和奇數異步
這是我的代碼。
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#define MAX 1000
int count = 0;
void print_odd_numbers();
void *print_even_numbers();
int main() {
pthread_t t;
int iret;
iret = pthread_create(&t, NULL, print_even_numbers, NULL);
print_odd_numbers();
pthread_join(t, NULL);
return 0;
}
void print_odd_numbers() {
while(count <= MAX) {
if(count % 2 == 1) {
printf("%d\n", count);
}
count++;
}
}
void *print_even_numbers() {
while(count <= MAX) {
if(count % 2 == 0) {
printf("%d\n", count);
}
count++;
}
pthread_exit(NULL);
}
每個線程都需要有自己的 '計數' 變量。不要使用全局變量! –
@MartinJames我見過很多程序,他們保持統計全球。實際上這兩個線程應該並行運行,所以它們的計數應該相同。據我所知。如果我錯了,請幫忙。 –
@Priyanka Naik不,這是不正確的。原因與CPU緩存一致性有關。除非您正在使用旨在以緩存一致方式自動遞增共享值的特定操作,否則您可以讓兩個CPU(或多個核)每個迭代它們自己的緩存中的變量副本,然後將它們的副本寫回到有一點。另外,編譯器不必重新讀取內存中的值,但這是另一回事。 –