鎖 成對出現(xiàn) 互斥量需要在上鎖期間操作?鎖的目的是為了鎖住臨界空間,所以肯定是會有多個線程去臨界空間的對吧;

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