- 论坛徽章:
- 0
|
我的目的:
在main里接收用户输入的一个char,把他存在一个全局的char型变量buff中,线程检查这个buff把它再打印出来。也就是个生产者消费者问题吧。我期望得到的输出是:
Entering new created thread...
please enter a character to main: (a) //这里用户假设输入a
main thread get a
thread get a from main
please enter a character to main: //main中再等待用户输入,直到用户输入q为止。
但我得到的输出确是:
Entering new created thread...
please enter a character to main:a
thread get a from main
main thread get a
please enter a character to main:thread get
from main
main thread get 怎么会出现红色这几句??不明白 后面也一样,直到我输入q才又能产生一个我期望得到的输出。
please enter a character to main:b
main thread get b
thread get b from main
please enter a character to main:main thread get
下面是我的代码,请给指点指点:
- #include <pthread.h>
- #include <semaphore.h>
- #include <stdio.h>
- #include <stdlib.h>
- void *thrd_routin(void * arg);
- char buff;
- sem_t local_sem;
- sem_t full_sem;
- sem_t empty_sem;
- int sem_var;
- int main()
- {
- pthread_t thdid;
- int res;
- char *thrdstatus;
-
-
- sem_init(&local_sem,0,1);
- sem_init(&full_sem,0,0);
- sem_init(&empty_sem,0,1);
- //sem_wait(&full_sem);
- res = pthread_create(&thdid,NULL,(void *)thrd_routin,NULL);
- if (res != 0)
- {
- perror("Creating thread failed!\n");
- exit(-1);
- }
- //char tmp;
-
- do{
-
- sem_wait(&empty_sem);
- sem_wait(&local_sem);
-
- printf("please enter a character to main:");
- buff = getchar();
- sem_post(&local_sem);
- sem_post(&full_sem);
- printf("main thread get %c\n",buff);
- } while( buff != 'q' );
- pthread_join(thdid,(void**)&thrdstatus);
- sem_destroy(&local_sem);
- exit(0);
- }
- void *thrd_routin( void *arg)
- {
- printf("Entering new created thread...\n");
-
- while( buff != 'q')
- {
- sem_wait(&full_sem);
- sem_wait(&local_sem);
- printf("thread get %c from main\n",buff);
- fflush(stdout);
- sem_post(&local_sem);
- sem_post(&empty_sem);
- }
- exit(0);
- }
复制代码
[ 本帖最后由 zhoufanking 于 2008-6-21 22:06 编辑 ] |
|