#include <pthread.h> #include <stdio.h> #include <sys/time.h> #include <string.h> #include <stdlib.h> #define MAX 10 pthread_t thread[2]; pthread_mutex_t mut; int number=0, i; struct parameter{ char* fd; int hit; }; void *threadd(void* data) { struct parameter *p; p=(struct parameter*)data; int fd=p->fd; int hit=p->hit; printf ("thread : I'm thread %d,%d\n",fd,hit); while(i<MAX){ // printf("thread%d : number = %d\n",threadNum,number); pthread_mutex_lock(&mut); printf("thread%d : number = %d,i = %d\n",fd,number,i); number++; printf("thread%d : number = %d,i = %d\n",fd,number,i); i++; pthread_mutex_unlock(&mut); sleep(1); } printf("thread%d :主函数在等我完成任务吗?\n",fd); free(p); pthread_exit(NULL); } void thread_create(void) { int temp; memset(&thread, 0, sizeof(thread)); /*创建线程*/
//struct parameter p;
// p.fd=555;
// p.hit=666
struct parameter*pptr=malloc(sizeof(struct parameter));
pptr->fd="555"; pptr->hit=666; if((temp = pthread_create(&thread[0], NULL, threadd, pptr)) != 0)//pthread_create函数和主进程不是按顺序执行,因此若用p而不是pptr为threadd传递参数
//会导致thread_create函数(是自定义的函数,不是pthread_create函数)执行到大括号而结束,而此时pthread_create函数还没有执行完,而使得p中的值失效。
printf("线程1创建失败!\n"); else printf("线程1被创建\n"); struct parameter*qptr=malloc(sizeof(struct parameter)); qptr->fd="777"; qptr->hit=888; if((temp = pthread_create(&thread[1], NULL, threadd, qptr)) != 0) printf("线程2创建失败"); else printf("线程2被创建\n"); // sleep(3); } void thread_wait(void) { /*等待线程结束*/ if(thread[0] !=0) { pthread_join(thread[0],NULL); printf("线程1已经结束\n"); } if(thread[1] !=0) { pthread_join(thread[1],NULL); printf("线程2已经结束\n"); } } int main() { /*用默认属性初始化互斥锁*/ pthread_mutex_init(&mut,NULL); printf("我是主函数哦,我正在创建线程,呵呵\n"); thread_create(); printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\n"); thread_wait(); return 0; }