📄 serv08.c
字号:
/* include serv08 */#include "unpthread.h"#include "pthread08.h"static int nthreads;pthread_mutex_t clifd_mutex = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t clifd_cond = PTHREAD_COND_INITIALIZER;intmain(int argc, char **argv){ int i, listenfd, connfd; void sig_int(int), thread_make(int); socklen_t addrlen, clilen; struct sockaddr *cliaddr; if (argc == 3) listenfd = Tcp_listen(NULL, argv[1], &addrlen); else if (argc == 4) listenfd = Tcp_listen(argv[1], argv[2], &addrlen); else err_quit("usage: serv08 [ <host> ] <port#> <#threads>"); cliaddr = Malloc(addrlen); nthreads = atoi(argv[argc-1]); tptr = Calloc(nthreads, sizeof(Thread)); iget = iput = 0; /* 4create all the threads */ for (i = 0; i < nthreads; i++) thread_make(i); /* only main thread returns */ Signal(SIGINT, sig_int); for ( ; ; ) { clilen = addrlen; connfd = Accept(listenfd, cliaddr, &clilen); Pthread_mutex_lock(&clifd_mutex); clifd[iput] = connfd; if (++iput == MAXNCLI) iput = 0; if (iput == iget) err_quit("iput = iget = %d", iput); Pthread_cond_signal(&clifd_cond); Pthread_mutex_unlock(&clifd_mutex); }}/* end serv08 */voidsig_int(int signo){ int i; void pr_cpu_time(void); pr_cpu_time(); for (i = 0; i < nthreads; i++) printf("thread %d, %ld connections\n", i, tptr[i].thread_count); exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -