我試着編寫一個帶有2個線程的代碼,它應該將2個數字y增加到100,每次發生增量時,都應該打印出來。使用多線程遞增變量的值
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *inc_x(void *x_void_ptr){
int *x_ptr = (int *)x_void_ptr;
while (++(*x_ptr)<100) {
printf("x increment to %d \n",*x_ptr);
*x_ptr++;
}
return NULL;
}
void *inc_y(void *y_void_ptr){
int *y_ptr = (int *)y_void_ptr;
while (++(*y_ptr)<100) {
printf("y increment to %d \n",*y_ptr);
*y_ptr++;
}
return NULL;
}
int main()
{
int x = 0;
int y = 0;
printf("x: 0 , y : 0\n");
pthread_t inc_x_thread, inc_y_thread;
if (pthread_create(&inc_x_thread, NULL, inc_x, &x)) {
fprintf(stderr, "Error creating thread \n");
return 1;
}
if (pthread_create(&inc_y_thread, NULL, inc_y, &y)) {
fprintf(stderr, "Error creating thread \n");
return 2;
}
printf("%d , %d" , x,y);
return 0;
}
但我的x,y值沒有增加。有人能告訴我爲什麼嗎?謝謝(順便說一句,我是C新手)。
'* x_ptr ++;'增加指針。你也不要等待線程。 – mch
你怎麼知道他們不增加?它是一個多線程程序,你不能知道'mainf中的printf(「%d,%d」,x,y);'會在線程之前還是之後執行。 – Lundin
如果你修復指針增量(見mch)。你在一次循環迭代中增加值兩次 –