【问题标题】:Thread Processing [closed]线程处理[关闭]
【发布时间】:2020-01-27 17:59:00
【问题描述】:

创建一个线程。从用户那里获取一个字符串。生成一条包含用户输入附加计数器值(i)的消息。写入缓冲区并让父线程在可用时读取消息并显示。请帮助我进行所需的更正。 我无法获取输出

不显示最终输出。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/select.h>
#include <pthread.h>
#include <semaphore.h>
#define MAX 1024
#define SUCCESS 0
#define FAILURE 1
char store[MAX];
sem_t reader;
sem_t writer;
void *show_count(void *arg)
{
    int i=0;    
    int ret_val=-1;
    int counter=0;
    struct timeval tv;
    printf("\nPlease enter the value of counter......");
    scanf("%d",&counter);
    tv.tv_usec=0;
    for (i=0; i<3; i++)
    {
        char buff[20];
        printf("\n%d",i);
        tv.tv_sec=counter;
        ret_val=select(3,NULL,NULL,NULL,&tv);
        if(0!=ret_val)
        {
            perror("\nSelect()...");
            exit(-1);
        }
        else
        {
            sprintf(buff,"%d",i);
            sem_wait(&writer);
            strcat(store,(char *)arg);
            strcat(store, buff);
            sem_post(&reader);
            printf("\nstring concatenation done....");
        }    
    }
    return (void*)store;
}

int main()
{
    int ret=-1;
    pthread_t trd;
    pthread_attr_t att;
    pthread_attr_init(&att);
    sem_init(&reader,0,0);
    sem_init(&writer,0,MAX);
    char buffer[MAX];
    char data[MAX];
    printf("\n Please enter a string.....");
    fgets(buffer, MAX, stdin);
    buffer[strlen(buffer)-1]='\0';
    ret=pthread_create(&trd,NULL,show_count,buffer);
    if(0!=ret)
    {
        perror("\nError creating thread.......");
        exit(-1);
    }
    pthread_join(trd,(void **)&data);
    sem_wait(&reader);
    printf("%s",(char *)data);
    sem_post(&writer);
    sem_destroy(&reader);
    sem_destroy(&writer);
    return SUCCESS;
}

【问题讨论】:

  • 如果您正在尝试生产者/消费者问题,那么您甚至还没有接近。请阅读有关该问题的在线资料。

标签: c pthreads semaphore


【解决方案1】:

您没有打印出来的问题是一个简单的解决方法。当您实际上没有在任何地方设置它时,您正在打印 data 的值。

printf("%s",(char *)data); 更改为printf("%s",(char *)store); 会生成连接值。

我不完全清楚你应该对计数器输入做什么,所以我不会评论输出的有效性。如果输出不正确并且您想提供一些说明,我将编辑我的帖子并提供更完整的回复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2016-02-11
    相关资源
    最近更新 更多