我有一个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 );
}
输出(我确定消息之前已经在那里):
\n
结尾?stdout
是行缓冲的,因此只有在打印换行符时才会刷新。 - Barmarcyg_mutex_lock
更有可能是锁定的候选者,而不是printf。您需要按照如何创建一个最小化、完整且可验证的示例的指南发布。请编辑问题并包含这样的示例代码。 - Luis Colorado