簡體   English   中英

C pthread互斥鎖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM