[root@localhost test]# g++ test.cpp -pthread
[root@localhost test]# ./a.out
I'am worker 3,mygoal 30 yuan,earn 28 yuan
I'am worker 4,mygoal 40 yuan,earn 38 yuan
I'am worker 2,mygoal 20 yuan,earn 18 yuan
I'am worker 5,mygoal 50 yuan,earn 48 yuan
I'am worker 1,mygoal 10 yuan,earn 8 yuan
I'am worker 6,mygoal 60 yuan,earn 58 yuan
I'am worker 7,mygoal 70 yuan,earn 68 yuan
I'am worker 8,mygoal 80 yuan,earn 78 yuan
I'am worker 9,mygoal 90 yuan,earn 88 yuan
worker 1 earned: 8
worker 2 earned: 18
worker 3 earned: 28
worker 4 earned: 38
worker 5 earned: 48
worker 6 earned: 58
worker 7 earned: 68
worker 8 earned: 78
worker 9 earned: 88
I'am worker 10,mygoal 100 yuan,earn 98 yuan
worker 10 earned: 98
total earned 530
[root@localhost test]# cat test.cpp
#include<stdio.h>
#include<pthread.h>
void * EarnMoney(void * arg) {
long to_earn = (long)arg;
long earned = to_earn -2;
printf("I'am worker %d,mygoal %d yuan,earn %d yuan\n",to_earn/10,to_earn,earned);
return (void*)earned;
}
#define WORKN 10
int main() {
pthread_t workers[WORKN];
int i;
for(i = 0 ; i < WORKN ; i++) {
pthread_create(workers+i,NULL,EarnMoney,(void*)(long)((i+1)*10));
}
long earned_money = 0;
for(i = 0 ; i < WORKN ; i++) {
long worker_earned = 0;
pthread_join(workers[i],(void**)&worker_earned);
printf("worker %d earned: %d\n",i+1, worker_earned);
earned_money += worker_earned;
}
printf("total earned %d\n",earned_money);
}
-
可以根据输出看到,老板一个个获取工人的返回值,即工人打工完成.
-
然后老板最后汇总得到530
元.