【发布时间】: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;
}
【问题讨论】:
-
如果您正在尝试生产者/消费者问题,那么您甚至还没有接近。请阅读有关该问题的在线资料。