gpt4 book ai didi

C pthread 互斥量

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:13 25 4
gpt4 key购买 nike

我有一个简单的程序可以回显用户输入的字符。创建了两个线程来运行此 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(后跟 ENTER 键),那实际上 是两个字符,a\n

如果你输入 ab 而中间没有 ENTER,你应该看到 ab 回显(一旦你点击 ENTER 之后,因为您的控制台很可能处于熟化模式)。

只需放置一个额外的 getchar() 来“吞下”换行符,即可快速确认:

characterIn = getchar();
getchar();
characterOut = characterIn;

这是为了调试目的,并不是真正可行的解决方案。 可行的解决方案是使用基于行的输入,例如详细的 here .

关于C pthread 互斥量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52471968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com