我有一个带有两个线程的 C 程序,其中一个线程几乎一直在fgets()
等待用户输入时被阻塞。当第一个线程被阻塞时,第二个线程可能需要打印到终端fgets()
。
从我的测试看来,程序等待fgets()
第一个线程返回,然后第二个线程可以打印。
这是它的工作原理还是我可以在另一个线程被阻塞时打印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 );
}
输出(我确定该消息之前存在):