#include
#include
#include
#include
#include
#define MAX_THREAD 3 // :线程的个数
unsigned long long main_counter, counter[MAX_THREAD];
void *thread_worker(void *);
int main(int argc, char *argv[])
{
int i, rtn, ch;
pthread_t pthread_id[MAX_THREAD] = { 0 }; //存放每个线程到id
for (i = 0; i < MAX_THREAD; i++) {
if (pthread_create(&pthread_id[i], NULL, thread_worker, &i))
printf("thread_create failed ...\n");
sleep(1);
}
do {
unsigned long long sum = 0;
for (i = 0; i < MAX_THREAD; i++) {
sum += counter[i];
printf("counter[%d]:%llu\n", i + 1, counter[i]);
}
printf("main_counter:%llu /sum: %llu \n", main_counter, sum);
} while ((ch = getchar() != 'q'));
return 0;
}
void *thread_worker(void *p)
{
int thread_num;
thread_num = *(int *) p;
for (;;) {
counter[thread_num]++;
main_counter++;
}
}[/code]如上线程的问题..
为什么加上sleep之后 结果为:
counter[1]:379351730
counter[2]:137145971
counter[3]:10079930
main_counter:501406323 /sum: 526577629
counter[1]:379351730
counter[2]:137145971
counter[3]:10086768
main_counter:501413160 /sum: 526584467
counter[1]:379351730
counter[2]:137145971
counter[3]:10090440
main_counter:501416875 /sum: 526588139
似乎可以解释的通
但是要是不加sleep 结果让人很纳闷..
counter[1]:0
counter[2]:15091
counter[3]:0
main_counter:16729 /sum: 15079
counter[1]:0
counter[2]:108744043
counter[3]:0
main_counter:156850651 /sum: 108744043
counter[1]:0
counter[2]:167499032
counter[3]:0
main_counter:247748368 /sum: 167499032
就高人解释阿..
txgc_wm 于 2011-04-16 01:01:12发表:
建议楼主在线程中添加打印信息,这样可以观察出线程的执行顺序。 另外,也可以在线程中获取系统的当前时间,来加以分析!
楼主,可能另外的两个线程还没有被调度,主线程和其中的一个线程抢占着cpu的资源。可尝试将线程的优先级提高。
chengshiding 于 2011-04-15 23:58:09发表:
有时间看看