Сервер предназначен для многопоточного сервера, который порождает новые потоки при подключении к производителю или потребителю через TCP. Моя проблема в том, что я застреваю в состоянии ожидания, как только клиент-производитель заполняет очередь. Этот фрагмент показывает обработку сервером соединения с производителем. Формат запроса, который отправляет производитель - PUT (элемент)
reqline[0] = strtok (mesg, " \t\n");
if ( strncmp(reqline[0], "PUT\0", 4)==0 )
{
item[0]=strtok(NULL," \t\n");
pthread_create (&pro, NULL, producer, fifo);
pthread_join (pro, NULL);
}
Итак, вы можете видеть, что я создаю новый поток, который обрабатывает работу по заполнению очереди / обнаружению, когда она пуста. Код внутри производителя:
queue *fifo;
int i=atoi(item[0]);
char*fullmsg="Full\n";
fifo = (queue *)q;
pthread_mutex_lock (fifo->mut);
while (fifo->full) { //the problem block
printf ("producer: queue FULL.\n");
send(conn_s, fullmsg,strlen(fullmsg),0);
pthread_cond_wait (fifo->notFull, fifo->mut);
}
queueAdd (fifo, 0);
pthread_mutex_unlock (fifo->mut);
pthread_cond_signal (fifo->notEmpty);
Я верю, что проблема заключается в ожидании Сервер, очевидно, ожидает условие, которое никогда не может быть выполнено, учитывая, что потребительский поток не был запущен, чтобы уничтожить очередь. Я думал, что должен изменить условие, чтобы дождаться входящего соединения с потребителем, а затем запустить поток потребителя. Но тогда кажется глупым делать это в рамках этого метода. Если я отправлю запрос потребителю в этом состоянии, ничего не произойдет.
Любые предложения с благодарностью. Я не уверен, что это возможно.