原创 System V消息隊列(2)
消息發送/接收API msgsnd函數 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); 參數 msgid: 由msgget函數返回的消息隊列標
原创 System V消息隊列(1)
消息隊列概述 消息隊列提供了一個從一個進程向另外一個進程發送一塊數據的方法(僅侷限於本機); 每個數據塊都被認爲是有一個類型,接收者進程接收的數據塊可以有不同的類型值. 消息隊列也有管道一樣的不足: 每個消息的最長字節
原创 字符串壓縮
例如:aac 壓縮爲1ac #include<iostream> using namespace std; int main() { string str; cin >> str; char pre, now; int
原创 觀察者模式(Observer)
觀察者模式 定義了對象間的一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象(被觀察者)。當主題對象的狀態發生更改時,會通知所有觀察者,讓它們能夠自動更新。 動機 在軟件構建的過程中,我們需要爲某些對象建立一種“通知依賴關係”
原创 策略模式(Strategy)
策略模式(Strategy) 定義一系列算法,把他們一個個封裝起來,並且是他們可以互相替換(變化)。該模式似的算法可以獨立於使用它的客戶程序(穩定的)而變化(擴展,子類化)。——《設計模式》GoF 上面部分是穩定的,下面是變化的。 動機
原创 模版方法(Template Method)
“組件協作”模式: 現代軟件專業分工之後的第一個結果是“框架與應用程序的劃分”,“組件協作”模式通過晚期綁定,來實現框架與應用程序之間的鬆耦合,使二者之間協作時常用的模式。 典型模式 Template Method Strategy O
原创 排序問題next_permutation
利用next_permutation能夠找出排序的下一個數。 next_permutation的思想是從右向左尋找兩個相鄰的元素,令第一個元素爲*i,第二個元素爲*ii,且滿足*i<*ii。找到這樣一組元素後,在從最尾端開始往前查找,找出
原创 簡單線程池實現
目標 1.用於執行大量相對短暫的任務 2.當任務增加的時候能夠動態的增加線程池中線程的數量值到達一個閾值 3.當任務執行完畢的時候,能夠動態的銷燬線程池中的線程 4.該線程池的實現本質上也是生產者與消費者模型的應用。生產者線程向任務隊
原创 POSIX共享內存
1. 創建/獲取一個共享內存 #include <sys/mman.h> #include <sys/stat.h> /* For mode constants */ #include <fcntl.h>
原创 Linux多線程--POSIX信號量、互斥鎖、讀寫鎖、條件變量
Posix信號量 Posix 信號量 有名信號量 無名信號量 sem_open sem_init sem_close sem_destroy sem_unlink
原创 Linux多線程 --線程屬性
線程屬性 初始化/銷燬線程屬性 int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *attr); 獲取/設置線程分
原创 posix消息隊列
posix和System V 歷史 UNIX兩大貢獻者貝爾實驗室和BSD,在進程之間通信側重不同,前者基於內核對進程之間的通信手段進行了改進,形成了“System V IPC”,而後者則是基於網絡形成了套接字。
原创 Linux多線程 --線程理論
線程概念 在一個程序裏的一個執行路線就叫做線程(thread)。更準確的定義是:線程是“一個進程內部的控制序列/指令序列”; 一切進程至少有一個執行線程; 進程 VS. 線程 1.進程是資源分配(進程需要參與資源的競
原创 Socket編程(1) --TCP/IP簡述
ISO的OSI OSI(open system interconnection)開放系統互聯模型是由ISO國際標準化組織定義的網絡分層模型,共七層, 從下往上爲: OSI七層參考模型 物理層(Physical Layer)
原创 Linux多線程 --線程基本API
POSIX線程庫 與線程有關的函數構成了一個完整的系列,絕大多數函數的名字都是以“pthread_”開頭,要使用這些函數庫,要通過引入頭文<pthread.h>,而且鏈接這些線程函數庫時要使用編譯器命令的“-lpthread”選項[U