Witam,
Mam następujący problem:
- piszę aplikację która ma obsłużyć maksymalnie N połączeń za pomocą wątków
- rozpoczynanie nowego wątku odbywa się w pętli nieskończonej
Problem jest następujący: co zrobić, gdy maksymalna liczba wątków zostanie przekroczona? U mnie wpada w petle nieskonczona i z powodu nieuruchamiania accept bardzo wzrasta uzycie CPU. Czy jest jakis typowy sposob na tego typu problem?
Kod wygląda mniej więcej tak:
while(1) {
/*
* Glowna petla serwera oczekujaca na polaczenia.
*/
if(aktywnych_watkow == N) {
printf("Przekroczono limit uzytkownikow\n");
continue;
}
/* Znajdz pierwszy wolny slot na watek */
for(i = 0; i < !slots[i].is_empty; ++i);
if( (user_slots[i].sockd = accept(serwersockfd, (struct sockaddr*) &(slots[i].s), &len)) == -1 ) {
fprintf(stderr, "Accept call failed!\n");
continue;
}
/* Wystartuj watek uzytkownika */
start_user_thread(user_slots, i);
++aktywnych_watkow;
}