69,335
社区成员
发帖
与我相关
我的任务
分享
/*POSIX 下线程控制的实验程序残缺版*/
#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];
void *thread_worker(void *);
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
int
main(int argc, char* argv[])
{
int i, rtn, ch;
pthread_t pthread_id[MAX_THREAD] = {0}; /* 存放线程id*/
pthread_t t;
for (i = 0; i < MAX_THREAD; i++)
{
/* 在这里填写代码,用pthread_create建一个普通的线程,
线程id存入pthread_id[i],线程执行函数是thread_worker
并i作为参数传递给线程 */
pthread_create(&t, NULL, thread_worker,&i);
pthread_id[i] = t;
}
do
{
/* 用户按一次回车执行下面的循环体一次。按q退出 */
unsigned long long sum = 0;
unsigned long long tmp[MAX_THREAD];
/* 求所有线程的counter的和 */
for (i = 0; i < MAX_THREAD; i++)
{
/* 求所有counter的和 */
sum += counter[i];
printf("%llu\n ", counter[i]);
}
printf("%llu-----%llu\n", main_counter, sum);
} while ((ch = getchar()) != 'q');
return 0;
}
void
*thread_worker(void* p)
{
/*在这里填写代码,把main中的i的值传递给thread_num*/
int *thread_num = (int *)p;
for(;;)
{
/*无限循环*/
pthread_mutex_lock(&mutex1);
counter[*thread_num]++; /* 本线程的counter加一 */
main_counter++; /* 主counter 加一 */
pthread_mutex_unlock(&mutex1);
}
}
void*thread_worker(void* p)
{
// int *thread_num = (int *)p;
for(;;)
{
pthread_mutex_lock(&mutex1);
if( ((*(int*)p)<3) && ((*(int*)p)>= 0))
{
counter[(*(int*)p)]++;
//printf("p=%d\n",(*(int*)p));
main_counter++;
}
pthread_mutex_unlock(&mutex1);
}
}
加如上判断条件。