linux进程线程管理实验报告(6)
时间:2025-07-09
时间:2025-07-09
进程线程,死锁实验报告
四、实验结果
4.1 补充完全的源程序
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<ctype.h>
#include<pthread.h>
#define MAX_THREAD 3/* 线程的个数 */
unsigned long long main_counter,counter[MAX_THREAD];
/* unsigned long long是比long还长的整数 */
void* thread_worker(void*);
int main(int argc,char argv[]){
int i,rtn;
char ch;
pthread_t pthread_id[MAX_THREAD]={0};/* 存放每个线程的id */ for(i=0;i<MAX_THREAD;i++){
pthread_create(&pthread_id[i],NULL,thread_worker,(void*)i);
/*用pthread_create建一个普通的线程, 线程id存入pthread_id[i], 线程执行的函数是thread_worker,并i作为参数传递给线程 */
}
/* 用户按一次回车执行下面的循环体一次。按q退出 */
do{
unsigned long long sum=0;
for(i=0;i<MAX_THREAD;i++){
sum+=counter[i]; /* 求所有线程的counter的和 */
printf("counter[%d]=%llu\n",i,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; /*把main中的i的值传递给thread_num */
for(;;){
main_counter++;
counter[thread_num]++;
}
}
4.3 回答上述实验内容中的问题
1. 试验运行前我认为前三列数不会相等,因为三个线程运行次数是随机的,结
上一篇:数学教案第一周