/* POSIX 下线程控制的实验程序残缺版 1.2 7 */
#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还长的整数 */
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* thread_worker(void* p)
{
int thread_num;
thread_num = *((int*)p);
/* 在这里填写代码,把main中的i的值赋给thread_num */
for(;;) /* 无限循环 */
{ pthread_mutex_lock(&mutex);
counter[thread_num]++;
main_counter++; /* 主counter 加一 */
pthread_mutex_unlock(&mutex);
}
return NULL;
}
int main(int argc, char* argv[])
{
int i, rtn, ch;
pthread_t pthread_id[MAX_THREAD] = {0};
for (i=0; i<MAX_THREAD; i++)
{
pthread_create(&pthread_id[i],NULL,thread_worker,&i);
}
do
{ pthread_mutex_lock(&mutex);
unsigned long long sum = 0;
/* 求所有线程的counter的和 */
for (i=0; i<MAX_THREAD; i++)
{
sum += counter[i];
printf("%llu ", counter[i]);
}
pthread_mutex_unlock(&mutex);
printf("%llu/%llu", main_counter, sum);
}
while ((ch = getchar()) != 'q');
pthread_mutex_destroy(&mutex);
return 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还长的整数 */
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* thread_worker(void* p)
{
int thread_num;
thread_num = *((int*)p);
/* 在这里填写代码,把main中的i的值赋给thread_num */
for(;;) /* 无限循环 */
{ pthread_mutex_lock(&mutex);
counter[thread_num]++;
main_counter++; /* 主counter 加一 */
pthread_mutex_unlock(&mutex);
}
return NULL;
}
int main(int argc, char* argv[])
{
int i, rtn, ch;
pthread_t pthread_id[MAX_THREAD] = {0};
for (i=0; i<MAX_THREAD; i++)
{
pthread_create(&pthread_id[i],NULL,thread_worker,&i);
}
do
{ pthread_mutex_lock(&mutex);
unsigned long long sum = 0;
/* 求所有线程的counter的和 */
for (i=0; i<MAX_THREAD; i++)
{
sum += counter[i];
printf("%llu ", counter[i]);
}
pthread_mutex_unlock(&mutex);
printf("%llu/%llu", main_counter, sum);
}
while ((ch = getchar()) != 'q');
pthread_mutex_destroy(&mutex);
return 1;
}