У меня есть программа на 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 );
}
Вывод (я уверен, что сообщение было там раньше):