serv07.c 860 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /* include serv07 */
  2. #include "unpthread.h"
  3. #include "pthread07.h"
  4. pthread_mutex_t mlock = PTHREAD_MUTEX_INITIALIZER;
  5. int
  6. main(int argc, char **argv)
  7. {
  8. int i;
  9. void sig_int(int), thread_make(int);
  10. if (argc == 3)
  11. listenfd = Tcp_listen(NULL, argv[1], &addrlen);
  12. else if (argc == 4)
  13. listenfd = Tcp_listen(argv[1], argv[2], &addrlen);
  14. else
  15. err_quit("usage: serv07 [ <host> ] <port#> <#threads>");
  16. nthreads = atoi(argv[argc-1]);
  17. tptr = Calloc(nthreads, sizeof(Thread));
  18. for (i = 0; i < nthreads; i++)
  19. thread_make(i); /* only main thread returns */
  20. Signal(SIGINT, sig_int);
  21. for ( ; ; )
  22. pause(); /* everything done by threads */
  23. }
  24. /* end serv07 */
  25. void
  26. sig_int(int signo)
  27. {
  28. int i;
  29. void pr_cpu_time(void);
  30. pr_cpu_time();
  31. for (i = 0; i < nthreads; i++)
  32. printf("thread %d, %ld connections\n", i, tptr[i].thread_count);
  33. exit(0);
  34. }