1.基於程序的併發程式設計
void echo(int connfd);
void sigchld_handler(int sig)
int main(int argc, char **argv)
port = atoi(argv[1]);
signal(sigchld, sigchld_handler); //**子程序
listenfd = open_listenfd(port);
while (1)
close(connfd);
}exit(0);}
2.基於i/o多路復用,實現了多個客戶端的echo伺服器
typedef
struct
pool;
void init_pool(int listenfd, pool* p);
void add_client(int connfd, pool* p);
void check_clients(pool* p);
int byte_cnt=0;
int main(int argc, char **argv)
port = atoi(argv[1]);
listenfd = open_listenfd(port);
init_pool(listenfd, &pool);
while (1)
check_clients(&pool);
}exit(0);
}void init_pool(int listenfd, pool* p)
void add_client(int connfd, pool* p)
if(i == fd_setsize)
}void check_clients(pool* p)
else
}} 3.基於多執行緒,實現了多個客戶端的echo伺服器
void pthread_create(pthread_t *tidp, pthread_attr_t *attrp,
void * (*routine)(void *), void *argp)
//常常配合pthread_self,來終止當前執行緒
void pthread_cancel(pthread_t tid)
//阻塞, 直到等到指定的執行緒終止。
void pthread_join(pthread_t tid, void **thread_return)
//執行緒預設是可結合的:意味著可以被其他執行緒收回資源和殺死
//該函式使執行緒變為分離的,那麼 其資源就不必顯式的**了。
void pthread_detach(pthread_t tid)
//執行緒顯示終止
//主線程呼叫,等待所有其他執行緒終止,然後終止主線程和整個程序
void pthread_exit(void *retval)
//某個 執行緒呼叫exit,會終止程序以及所有與該程序相關的執行緒
//返回自己執行緒的id
pthread_t pthread_self(void)
void pthread_once(pthread_once_t *once_control, void (*init_function)())
void echo(int connfd);
void* thread(void* vargp);
int main(int argc, char **argv)
port = atoi(argv[1]);
listenfd = open_listenfd(port);
while (1)
exit(0);
}void* thread(void* vargp)
CSAPP讀書日記 第十二章 併發程式設計
構造併發程式的方法 構造併發程式最簡單的方法就是用程序,使用像fork exec和waitpid之類的函式。特點 父子程序之間共享檔案表,但是不共享使用者位址空間。優點 乙個程序不會覆蓋另乙個程序的虛擬記憶體。缺點 程序共享狀態資訊變得困難,必須使用顯式的ipc 程序間通訊 機制。結果就是這種設計方...
CSAPP 12章 網路程式設計
所有的網路應用都是基於相同的基本程式設計模型,有相似的整體邏輯結構,並且依賴相同的程式設計介面。模型,邏輯結構,程式設計介面。由乙個伺服器程序和多個客戶端程序組成。伺服器管理某種資源 resource 並通過操作這種資源來為它的客戶端提供某種服務 service 例子 web伺服器,resource...
併發程式設計學習 併發程式設計的挑戰
死鎖 資源限制的挑戰 併發程式設計的目的是為了讓程式執行的更快,但是並不是啟動更多的執行緒,就能讓程式最大限度的併發執行。在進行併發程式設計時,如果希望通過多執行緒執行任務讓程式執行的更快,會面臨非常多的挑戰,比如上下文切換的問題,死鎖的問題,以及受限於硬體和軟體的資源限制問題 即使是單核處理器也支...