鎖 成對出現 互斥量需要在上鎖期間操作?鎖的目的是為了鎖住臨界空間,所以肯定是會有多個線程去臨界空間的對吧;
std::mutex:最基本的互斥量,調用線程發生3種情況:成功上鎖,阻塞(該鎖被其他線程使用),死鎖(反復上鎖)
std::lock_guard && unique_lock:RAII相關;前者在其生命周期內自動上解鎖,初始化時即上鎖;
std::atomic:原子數據類型,不需要加鎖,就能實現原子操作,只有部分數據類型可用;
cond(配合std::unique_lock使用)作為全局變量,在哪個線程里調用wait就在阻塞哪個線程(此時線程是處于獲得鎖的情況的),他被阻塞的時候會釋放鎖,讓其他線程去執行,被喚醒時又會重新獲得鎖;只喚醒一個線程和喚醒所有線程是不一樣的,所有線程都被喚醒后,會去競爭鎖,與notify_one不同,他們不會再阻塞,會不斷去嘗試獲得鎖;
可以喚醒所有線程可能是它和sem的關鍵區別;sem會記錄一個值,而cond沒有;
sem_t;sem_init;sem_wait;sem_post;它和cond的區別是什么???
sem可能是由mutex + counter + condition variable實現的;
信號量可以解決條件變量中存在的喚醒丟失問題。因為信號量有一個狀態,如果想精準的同步,那么信號量可能會有特殊的地方。
信號量最有用的場景是用以指明可用資源的數量。將連接數量作為信號量;
std::thread:形參為函數名,執行相應的函數,第二個參數為相應函數的參數;
shared_ptr:<>里面指明指向的數據類型;自動銷毀引用計數為0的對象;
socket()
輸入參數:IPV4 or 6(AF_INET);TCP or UDP(SOCK_STREAM);0(自動填充);
返回文件描述符;
bind()
用于服務器端;旨在綁定套接字和自己的IP地址和端口;
輸入參數:socket()返回的文件描述符;const struct sockaddr *指針,由于兼容性的原因,這里我們只能先使用sockaddr_in 結構體來定義相應的IP地址和端口號,然后再強制轉換為 sockaddr 類型的方式。
返回值:0代表成功,-1代表失敗;
connect()
用于客戶端;旨在連接套接字和服務器端的IP地址和端口;
返回值:0代表成功,-1代表失??;
服務器端先listen再accept;
listen():非阻塞
輸入參數:socket返回的文件描述符;能接收多少個客戶端請求;
返回值:0,-1
accept():阻塞;
輸入參數:只不過這里的sockaddr_in并不需要具體的給出,另外最后的長度參數也是通過指針的方式傳進去的。
返回一個新的文件描述符,后續具體的通信都使用這個文件描述符進行數據的傳輸;
read()&&write()
為對應的文件描述符(服務器端為accept建立的,客戶端為socket建立的)。
_buf:只能是字符串的形式;
close():關閉相應的文件描述符;
0,-1
initsocket中涉及復用和優雅關閉的問題;setsockopt()
應該是和優雅關閉相關的;
sockaddr_in
IP地址:htonl(INADDR_ANY)或者inet_addr()
端口號:htons(port_)
socklen_t
epoll事件:
處理監聽;listenFd_獲取的文件描述符如果和這個相等則處理監聽
epollrdhup(0x2000),epollhup(0x010),epollerr(0x008),關閉連接
epollin:處理讀,0x001;表示對應的文件描述符可讀;
epollout:處理寫,0x004;
初始化了一些線程并將他們全都detach;
Listen Mode;OpenConn Mode;分別是什么含義?
epoll_create()
輸入參數:size表示內核要監聽的描述符數量;
返回值:文件句柄,-1
epoll_ctl():注冊要監聽的事件類型;
輸入參數:epoll句柄;增加,修改,刪除;要監聽的描述符;要監聽的事件(這是另一個簡單的結構體);
返回值:0,-1
epoll_wait():等待事件就緒,成功時返回就緒事件的數目;
輸入參數:epoll句柄;從內核得到的就緒事件集合;告訴內核events的大?。坏却瑫r時間
返回值:0,-1
服務器端listen—>epoll_wait—>accept;
底下case部分的監聽部分有點看不懂,為什么要做這樣一個判斷呢?還有循環判斷的終止索引應該是啥?
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
新聞名稱:C++鎖網絡相關-創新互聯
鏈接地址:http://m.kartarina.com/article30/ccgipo.html
成都網站建設公司_創新互聯,為您提供移動網站建設、標簽優化、面包屑導航、虛擬主機、網站內鏈、定制開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯