У меня есть простая программа, которая отображает символ, введенный пользователем.Для выполнения этой функции эха созданы два потока, и я использую мьютекс pthread для привязки критического кода к одному процессу за раз, чтобы символ правильно выводился на печать:
#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