我有一个简单的程序,它可以回传用户输入的字符。创建了两个线程来运行这个echo函数,我使用pthread mutex一次将关键代码锁定到一个进程,以便正确打印字符:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
char characterIn, characterOut;
void* echoCharacter()
{
pthread_mutex_lock(&mutex);
/* crital code start */
characterIn = getchar();
characterOut = characterIn;
putchar(characterOut);
/* crital code end */
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main()
{
//spawn
pthread_t id;
pthread_t id1;
pthread_create(&id, NULL, echoCharacter, NULL);
pthread_create(&id1, NULL, echoCharacter, NULL);
//wait
pthread_join(id, NULL);
pthread_join(id1, NULL);
return 0;
}
但是我没有得到正确的输出。它只回显第一个线程输入的第一个字符,但程序在此之后停止,不要求输入另一个字符:
>>a
>>a
>>
预期产量:
>>a
>>a
>>b
>>b
最佳答案
如果您在一行上输入a
(后跟回车键),实际上是两个字符,a
和\n
。
如果您输入ab
时没有中间的输入,您应该会看到ab
回显(一旦您随后点击enter,因为您的控制台很可能处于煮熟模式)。
只需放置一个额外的getchar()
来“吞下”换行符即可快速确认:
characterIn = getchar();
getchar();
characterOut = characterIn;
这是出于调试的目的,并不是一个真正可行的解决方案。一个可行的解决方案是使用基于行的输入,例如detailedhere。
关于c - C pthread互斥锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52471968/