muduo庫使用示例之聊天伺服器(下)
借用shared_ptr實現copy on write
- shared_ptr是引用計數智慧指標,如果當前只有一個觀察者,那麼引用計數為1,可以用shared_ptr::unique()來判斷
- 對於共享資源有兩個端,分別是read端、write端
- 對於write端,如果發現引用計數為1(說明只有一個寫者訪問它),這時可以安全地修改物件,不必擔心有人在讀它
- 對於read端,在讀之前把引用計數加1,讀完之後減1,這樣可以保證在讀的期間其引用計數大於1,可以阻止併發寫
- 比較難的是,對於write端,如果發現引用計數大於1,該如何處理?既然要更新資料,肯定要加鎖,如果這時候其他執行緒正在讀,那麼不能在原來的資料上修改,得建立一個副本,在副本上修改,修改完了再替換。如果沒有使用者在讀,那麼可以直接修改
相關推薦
muduo庫使用示例之聊天伺服器(下)
借用shared_ptr實現copy on write shared_ptr是引用計數智慧指標,如果當前只有一個觀察者,那麼引用計數為1,可以用shared_ptr::unique()來判斷 對於共享資源有兩個端,分別是read端、write端 對於write端,
muduo庫使用示例之聊天伺服器(上)
本文程式碼存放在muduo\examples\asio\chat目錄下 聊天伺服器示意圖 實現的功能:任何一個Client給Server傳送訊息後,Server都會將該訊息回射給連線上來的所有Client muduo實現一個聊天室伺服器,客戶傳送的訊息將廣播到連入的所有客戶
Mybatis 示例之 foreach (下)
foreach是用來對3種類型的物件進行迴圈操作的,關於foreach的基礎知識請看:Mybatis 示例之 foreach (上) 注:Map型別沒有預設的map,所以不能直接寫collection="map",如果這麼寫,需要保證傳入的Map引數有@Param("ma
muduo庫使用示例之3種網路模型(Sudoku求解伺服器)
10種大併發伺服器設計方案與muduo庫網路模型使用https://blog.csdn.net/weixin_36750623/article/details/84329044 muduo庫網路模型使用 程式碼存放在muduo-master\examples\sudoku下
muduo庫使用示例之檔案傳輸filetransfer
檔案傳輸(傳送)有下面3個版本,程式碼實現在muduo\examples\filetransfer 目錄中。 版本1:一次性將檔案讀入記憶體併發送 一次性將檔案讀入記憶體中的string fileContent,一次性呼叫send(const string&)傳送完畢。=
mysql建立觸發器實現相同伺服器下不同庫的表資料同步的錯誤收集
1、建立INSERT|UPDATE時,由於沒有加上declare和set語句,導致同步表中的大部分資料為null。 解決:參照建立MYSQL TRIGGER 2、1363 - There is no NEW row in on DELETE trigger 原因:delete觸發器不
mysql建立TRIGGER觸發器實現相同伺服器下不同庫的表資料同步
實現功能:mysql建立INSERT|UPDATE|DELETE觸發器實現相同伺服器下不同庫的表資料同步。比如table1表的資料有insert|update|delete操作,便同步到sync表中。然後再根據sync表中state(同步狀態)和oper(操作方式)欄位的狀態將sync表
gatewayworker長連線下聊天頁面之聊天記錄初始化
gatewayworker長連線下聊天頁面之聊天記錄初始化 針對課程:https://study.163.com/course/courseLearn.htm?courseId=1005015012#/learn/video?lessonId=1051355043&courseId=
Muduo 網路程式設計示例之八:用 Timing wheel 踢掉空閒連線
Muduo 網路程式設計示例之八:Timing wheel 踢掉空閒連線 陳碩 (giantchen_AT_gmail) 這是《Muduo 網路程式設計示例》系列的第八篇文章,原計劃講檔案傳輸,這裡插入一點計劃之外的內容。 本文介紹如何使用 timing wheel 來踢
SpringBoot學習筆記一之【Idea下建立springboot示例、啟動原理分析與兩種部署啟動方式】
1、使用背景 首先說下我們為什麼使用springboot,原因有以下幾點 1、快速建立獨立執行的spring專案以及與主流框架繼承 2、使用嵌入式的Servlet容器,無需打成war包 3、starters自動依賴於版本控制 4、大量的自動配置,簡化開發,也可修改預設值 5、
從零開始移植QT4.8.5之三--linux下交叉編譯QT執行庫
這篇文章要實現的目標是在linux下交叉編譯QT在嵌入式裝置OK6410的執行庫,最終在OK6410上執行QT演示程式。 1、觸控式螢幕庫檔案安裝tslib 首先如果嵌入式裝置上有觸控式螢幕,需要先移植tslib,這個不是本次的重點,所以我們就直接搭建編譯的時候需要的tsl
muduo網路庫學習之EventLoop(二):程序(執行緒)wait/notify 和 EventLoop::runInLoop
// 事件迴圈,該函式不能跨執行緒呼叫 // 只能在建立該物件的執行緒中呼叫void EventLoop::loop() {// 斷言當前處於建立該物件的執行緒中 assertInLoopThread(); while (!quit_) { pollReturnTime_ =
三、ESP8266AT開發之STA模式下ESP8266建立伺服器,建立客戶端(解決防火牆)
Station模式和AP模式區別 AP模式下,8266自己發出訊號,客戶端可以連。 STA模式8266處於基站接收訊號,所以需要共同連線一個外面的WiFi ESP8266做伺服器,
muduo網路庫學習之muduo_http 庫涉及到的類
#include <muduo/net/http/HttpServer.h>#include <muduo/net/http/HttpRequest.h>#include <muduo/net/http/HttpResponse.h>#include <muduo/n
Android IM之基於Openfire+Smack的聊天伺服器的搭建與測試
XMPP協議(Extensible Messaging and PresenceProtocol,可擴充套件訊息處理現場協議)是一種基於XML的協議,目的是為了解決及時通訊標準而提出來的,最早是在Jabber上實現的。它繼承了在XML環境中靈活的發展性。因
muduo原始碼分析之實現TCP網路庫(連線的接收和關閉)
在EventLoop、Channel、Poller三個類中完成對一般描述符、事件迴圈(poll)的封裝。實現了Reactor的基本功能,接下來則需要將網路套接字描述符、I/O函式、等進行封裝。 1.傳統的TcpServer 在進行封裝之前需要明確我們需要
VS2015動態庫程式設計之Win32動態庫的使用(下)
文章相關視訊教程下載地址:http://pan.baidu.com/s/1skKSrSh 4 動態庫的載入及呼叫 動態庫的載入分為靜態載入、動態載入兩種方式。 4.1 靜態載入動態庫 靜態載入動態庫的步驟包括:設定專案附加庫目錄;設定專案附加依賴項;移動DLL檔案以及
muduo網路庫學習之Timestamp類、AtomicIntegerT 類封裝中的知識點
一、Timestamp類封裝 class Timestamp : public muduo::copyable, public boost::less_than_
VS2015動態庫程式設計之匯出C++類(下)
文章相關視訊下載地址http://pan.baidu.com/s/1eSpHjt4 2 呼叫DLL程式的編寫 建立一個基於對話方塊的MFC程式,在該程式的介面中,輸入圓的半徑後,可以獲取該圓的周長
數據庫知識之事務
事務日誌 相關 數據庫 class 得到 現象 現實 操作系統 數據 事務(Transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問並可能更新數據庫中各種數據項的一個程序執行單元(unit)。在計算機術語中,事務通常就是指數據庫事務。 概念 一個數據庫事