#include #include #include #include #include using namespace std;
struct s_info
;//定義這個結構體是因為執行緒呼叫函式只有乙個入口引數,但需要傳入多個引數,所以使用結構體傳參
void *thr(void *arg)//執行緒的呼叫函式
else if (n==0)//read是阻塞的,如果返回結果是0, 說明是客戶端傳送了檔案結束符,表明要結束了,不是客戶端不發訊息就是0
else
}close(ts->cfd);
return null;
}int main(int argc, const char *ar**)
int sfd, cfd;
int port=atoi(ar**[1]);
struct s_info ts[256];
int n,i=0;
pthread_t tid;
struct sockaddr_in addr_server;
addr_server.sin_port=htons(port);
addr_server.sin_addr.s_addr=htonl(inaddr_any);
addr_server.sin_family=af_inet;
struct sockaddr_in addr_client;
socklen_t addrlen=sizeof(addr_client);
sfd=socket(af_inet, sock_stream, 0);
bind(sfd, (struct sockaddr*) &addr_server, sizeof(addr_server));
listen(sfd, 20);
while (1)
ts[i].addr_client=addr_client;
ts[i].cfd=cfd;
pthread_create(&tid, null, thr, &ts[i]);//建立乙個執行緒
pthread_detach(tid);//當執行緒結束時,可以自動**執行緒
i++;
if (i==256) break;
} close(sfd);
return 0;
}
執行結果
多執行緒 學習12
以下內容來自 前面我們使用事件和乙個記錄讀者個數的變數來解決讀者寫者問題。問題雖然得到了解決,但 有點複雜。本篇將介紹一種新方法 讀寫鎖srwlock來解決這一問題。讀寫鎖在對資源進行保護的同時,還能區分想要讀取資源值的執行緒 讀取者執行緒 和想要更新資源的執行緒 寫入者執行緒 對於讀取者執行緒,讀...
多執行緒 學習12
以下內容來自 前面我們使用事件和乙個記錄讀者個數的變數來解決讀者寫者問題。問題雖然得到了解決,但 有點複雜。本篇將介紹一種新方法 讀寫鎖srwlock來解決這一問題。讀寫鎖在對資源進行保護的同時,還能區分想要讀取資源值的執行緒 讀取者執行緒 和想要更新資源的執行緒 寫入者執行緒 對於讀取者執行緒,讀...
linux多執行緒學習筆記
1.乙個程序中的所有執行緒都可以訪問該程序的組成部件,如檔案描述符和記憶體。2.在乙個程序中採用多執行緒程式設計可以改善響應時間和提高系統吞吐量。3.程序的所有資訊對該程序的所有執行緒都是共享的,包括可執行的程式文字,程式的全域性記憶體和堆記憶體,棧以及檔案描述符。4.執行緒id用pthread t...