「已注销」 2017-05-05 09:36 采纳率: 0%
浏览 837

《linux程序设计》线程

最近看《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?为什么?
恳请不吝赐教

  • 写回答

2条回答 默认 最新

  • 一枪尽骚丶魂 2017-05-05 10:56
    关注
    printf("You input %d character\n",strlen(work_area)-1);
    
    

    strlen(work_area)-1);

    评论

报告相同问题?

悬赏问题

  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析
  • ¥100 我想找人帮我写Python 的股票分析代码,有意请加mathtao
  • ¥20 Vite 打包的 Vue3 组件库,图标无法显示
  • ¥15 php 同步电商平台多个店铺增量订单和订单状态
  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别