最近看《linux程序设计》用信号量同步线程遇到疑惑了
代码说明:main线程接收一个字符串
t线程检测字符串的长度
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<pthread.h>
#include<semaphore.h>
void *thread_function(void*arg);
sem_t bin_sem;
#define WORK_SIZE 1024
char work_area[WORK_SIZE];
void test(int res,char*s)
{
if(res!=0)
{
fprintf(stderr,"%s failed\n",s);
exit(1);
}
}
int main()
{
int res;
pthread_t t;
void *thread_result;
res=sem_init(&bin_sem,0,0);
test(res,"sem_init");
res=pthread_create(&t,NULL,thread_function,NULL);
test(res,"pthread_creat");
printf("Input your word(end to quit)\n");
while(strncmp("end",work_area,3)!=0)
{
if(strncmp(work_area,"FAST",4)==0)
{
sem_post(&bin_sem);
sleep(1);
strcpy(work_area,"xxxx");/*疑问在这里*/
printf("work_area: %s\n",work_area);
sleep(1);
}else
fgets(work_area,WORK_SIZE,stdin);
sem_post(&bin_sem);
sleep(1);
}
printf("\nWaiting for thread to finish...\n");
res=pthread_join(t,&thread_result);
test(res,"pthread_join");
printf("Thread joined\n");
sem_destroy(&bin_sem);
exit(0);
}
void *thread_function(void*arg)
{
sem_wait(&bin_sem);
while(strncmp("end",work_area,3)!=0)
{
printf("You input %d character\n",strlen(work_area)-1);
sem_wait(&bin_sem);
}
pthread_exit(NULL);
}
cser@cser:./thread2
Input your word(end to quit)
FAST(我输入的)
you input 4 character
you input 4 character
work_area: xxxx
you input 3 character
cser@cser:
我就是最后那个输出不明白,为什么会是3而不是4,
如果我strcpy(work_area,"xxxxx"),则最后会输出4,
不明白最后输出的总比字符长度少1?为什么?
恳请不吝赐教