CSAPP 併發程式設計示例

2021-07-10 18:10:59 字數 1885 閱讀 5029

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...

併發程式設計學習 併發程式設計的挑戰

死鎖 資源限制的挑戰 併發程式設計的目的是為了讓程式執行的更快,但是並不是啟動更多的執行緒,就能讓程式最大限度的併發執行。在進行併發程式設計時,如果希望通過多執行緒執行任務讓程式執行的更快,會面臨非常多的挑戰,比如上下文切換的問題,死鎖的問題,以及受限於硬體和軟體的資源限制問題 即使是單核處理器也支...