原创 在Linux下線程死鎖的四個條件

 一、死鎖的原因和必要條件1.死鎖的概念  一般情況下,如果同一個線程先後兩次調用lock,在第一次調用時,由於鎖已經被佔,該線程會掛起等待別的線程釋放鎖,然而鎖正是被自己佔着的,該線程又被掛起,沒有機會釋放鎖,因此,就永遠處於掛起等待狀態

原创 c++賦值運算符函數

 請爲該CMyString類型添加賦值運算符函數第二種方法:其中運行結果爲s1=s2:s2=s1=s3爲:運行結果分析:雖然兩種都可以實現賦值運算符函數,但是第一種,如果內存不足導致m_pData是一個空指針,在delete時將會導致程序崩

原创 I/O多路複用之select

一、select    I/O多路轉接(select)是高級I/O的一種,阻塞IO,紀錄鎖,系統V流機制,I/O多路轉接(poll/epoll),readv和writev函數以及存儲映射IO(mmap),這些統稱爲高級IO。select系統

原创 我的友情鏈接

小鎮青苔zwy

原创 在Linux下利用crond實現一個定時任務並完成一個守護(精靈)進程

一、利用crond實現一個定時任務        在LINUX中,週期執行的任務一般由cron這個守護進程來處理[ps -ef|grep cron]。cron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間。cron的配置文件

原创 sever如何避免2MSL

一、根據TCP協議,主動發起關閉的一方,會進入TIME_WAIT狀態,持續2MSL,RFC 793建議MSL設置爲兩分鐘。爲什麼time_wait需要2*MSL等待時間?MSL就是maximum segment lifetime(最大分節生

原创 線程安全與可重入函數

一、線程安全        在目前線程是操作系統調度的最小單元,進程是資源分配的最小單元。在大多數操作系統中,一個進程可以同時派生出多個線程。這些線程獨立執行,共享進程的資源。線程主要由控制流程和資源使用兩部分構成,因此一個不得不面對的問題

原创 代理服務器與網絡地址轉換NAT

一、代理服務器    代理服務器是介於瀏覽器和Web服務器之間的一臺服務器。其功能是代理網絡用戶去取得網絡信息。網絡信息則是通過代理服務器進行中轉的。更重要的是:Proxy Server(代理服務器)是Internet鏈路級網關所提供的一種

原创 C函數指針與回調函數

一、函數指針    簡單聲明一個函數指針並不意味着它馬上就可以使用,和其它指針一樣,對函數指針執行簡接訪問之前必須把它初始化爲指向某一個函數。int f(int);int (*pf)(int)=&f;    第二個聲明創建了函數指針pf,並

原创 Linux下用條件變量實現多線程間生產者與消費者問題

一、 線程間的同步還有這樣一種情況:線程A需要等某個條件成立才能繼續往下執行,現在這個條件不成立,線程A就阻塞等待,線程B在執行過程中使這個條件成立了,就喚醒線程A繼續執行。在pthread庫中通過條件變量(Condition Variab

原创 實現一個簡潔版的String類

淺拷貝:深拷貝:注意事項:在淺拷貝中複製構造必須構造一個匿名對象在進行交換,在賦值操作符中傳參時不能使用引用。

原创 I/O多路複用之select,poll,epoll的區別

一、關於select,poll,epoll三種IO模型,都屬於多路IO就緒通知,提供了對大量文件描述符就緒檢查的高性能方案,只不過實現方式有所不同:select原理概述:調用select時,會發生以下事情:(1)從用戶空間拷貝fd_set到

原创 I/O多路複用之epoll

一、什麼是epoll    epoll是Linux內核爲處理大批量文件描述符而作了改進的poll,是Linux下多路複用IO接口select/poll的增強版本,它能顯著提高程序在大量併發連接中只有少量活躍的情況下的系統CPU利用率。另一點

原创 基於TCP協議的socket編程

一、什麼是socketsocket本身有“插座”的意思,在TCP/IP協議中,“IP地址+TCP或UDP端口號”唯一標識網絡通訊中的個進程,“IP地址+端口號”就稱爲socket。  在TCP協議中,建立連接的兩個進程各自有一個socket

原创 HTTP服務器中keep-alive 與 url常見問題

一、什麼是keep-alive模式我們知道HTTP協議採用“請求-應答”模式,當使用普通模式,即非KeepAlive模式時,每個請求/應答客戶和服務器都要新建一個連接,完成之後立即斷開連接(HTTP協議爲無連接的協議);當使用Keep-Al