#include<stdio.h>#include<string.h>#include<stdlib.h>#include<pthread.h>#include<semaphore.h>char buf[200]={0};
sem_t sem;int flag =0;void*func(void*arg){while(1){sem_wait(&sem);if(1==flag){//exit(-1);printf("end....\n");pthread_exit(NULL);}printf("本次输入了%ld个字符\n",strlen(buf));memset(buf,0,sizeof(buf));}}intmain(){int ret =-1;
pthread_t th =-1;sem_init(&sem,0,0);
ret =pthread_create(&th,NULL,func,NULL);if(ret !=0){printf("pthread_creat error\n");exit(-1);}printf("请输入字符以回车结束\n");while(scanf("%s",buf)){if(strstr(buf,"end")){//exit(-1);
flag =1;sem_post(&sem);printf("end\n");break;}sem_post(&sem);}
ret =pthread_join(th,NULL);if(ret !=0){printf("pthread_join error\n");exit(-1);}sem_destroy(&sem);return0;}
互斥锁
pthread_mutex_init:互斥锁初始化
pthread_mutex_destroy:互斥锁销毁
pthread_mutex_lock:互斥锁上锁
pthread_mutex_unlock:互斥锁解锁
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<pthread.h>#include<semaphore.h>char buf[200]={0};
pthread_mutex_t mutex;int flag =0;void*func(void*arg){while(1){if(1==flag){pthread_mutex_lock(&mutex);printf("本次输入了%ld个字符\n",strlen(buf));memset(buf,0,sizeof(buf));
flag=0;if(strstr(buf,"end")){pthread_exit(NULL);}pthread_mutex_unlock(&mutex);}}}intmain(){int ret =-1;
pthread_t th =-1;pthread_mutex_init(&mutex,NULL);
ret =pthread_create(&th,NULL,func,NULL);if(ret !=0){printf("pthread_creat error\n");exit(-1);}printf("请输入字符以回车结束\n");while(1){if(0==flag){pthread_mutex_lock(&mutex);scanf("%s",buf);
flag =1;if(strstr(buf,"end")){//exit(-1);printf("end\n");exit(0);}pthread_mutex_unlock(&mutex);}}
ret =pthread_join(th,NULL);if(ret !=0){printf("pthread_join error\n");exit(-1);}pthread_mutex_destroy(&mutex);return0;}
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<pthread.h>#include<semaphore.h>char buf[200]={0};
pthread_mutex_t mutex;
pthread_cond_t cond;int flag =0;void*func(void*arg){while(1){if(1==flag){pthread_mutex_lock(&mutex);pthread_cond_wait(&cond,&mutex);printf("本次输入了%ld个字符\n",strlen(buf));memset(buf,0,sizeof(buf));
flag=0;if(strstr(buf,"end")){pthread_exit(NULL);}pthread_mutex_unlock(&mutex);}}}intmain(){int ret =-1;
pthread_t th =-1;pthread_mutex_init(&mutex,NULL);pthread_cond_init(&cond,NULL);
ret =pthread_create(&th,NULL,func,NULL);if(ret !=0){printf("pthread_creat error\n");exit(-1);}printf("请输入字符以回车结束\n");while(1){if(0==flag){scanf("%s",buf);
flag =1;if(strstr(buf,"end")){//exit(-1);printf("end\n");exit(0);}}pthread_cond_signal(&cond);}
ret =pthread_join(th,NULL);if(ret !=0){printf("pthread_join error\n");exit(-1);}pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);return0;}