[英]C pthread mutex
我有一個簡單的程序,可回顯用戶輸入的字符。 創建了兩個線程來運行此echo函數,並且我正在使用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
如果要在一行上輸入a
(緊接着ENTER鍵),則實際上是兩個字符, a
和\\n
。
如果輸入ab
且中間沒有ENTER鍵 ,則應該看到ab
回顯(一旦您按回車鍵 ,因為控制台很可能處於熟模式)。
只需放置一個額外的getchar()
來“吞下”換行符即可快速確認:
characterIn = getchar();
getchar();
characterOut = characterIn;
這是出於調試目的,並不是真正可行的解決方案。 可行的解決方案是使用基於行的輸入,如此處所述 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.