4

fgets()私は 2 つのスレッドを持つ C プログラムを持っています。これらのスレッドの 1 つは、ユーザー入力を待っている間、ほぼ常にブロックされています。最初のスレッドが でブロックされている間に、2 番目のスレッドが端末に出力する必要がある場合がありますfgets()

fgets()私のテストから、プログラムは最初のスレッドが戻るのを待ってから、2番目のスレッドが印刷できるようです。

他のスレッドがブロックされている間に印刷できfgets()ますか?

この実装は、eCos (組み込みの構成可能なオペレーティング システム) で実行されます。

スレッドがロックされましたfgets():

int my_getline (char** argv, int argvsize)
{
    static char line[MAX_LINE];
    char *p;
    int argc;

    fgets(line, MAX_LINE, stdin);


    for (argc=0,p=line; (*line != '\0') && (argc < argvsize); p=NULL,argc++) {
        p = strtok(p, " \t\n");
        argv[argc] = p;
        if (p == NULL) return argc;
    }
    argv[argc] = p;
    return argc;
}

印刷しようとしているスレッド:

while(1){
        unsigned char bufr[50];
        read_until(bufr);
        if (bufr[1] == (unsigned char)NMFL ){
            cyg_mutex_lock(&scree_mtx);
            printf("Memory half full!\n");
            cyg_mutex_unlock(&scree_mtx);
            continue;
        }
        cyg_mbox_put( mbx_serial_userH, bufr );     
}

出力(メッセージは以前にあったはずです):

出力

4

1 に答える 1