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 );
}
出力(メッセージは以前にあったはずです):