原创 Linux 淺析線程死鎖

所謂的線程死鎖就是指多個線程因爲競爭資源而造成的一種僵局,一個線程不停的申請鎖,釋放鎖,從而不給另外的線程,獲得資源的機會,這就是死鎖問題。若沒有外力的作用,那麼這些線程偶會卡到這裏無法推進。 產生死鎖的必要條件: 1:互斥條件:

原创 Linux(十六)網絡基礎:網絡初識

網絡協議初識 協議分層: OSL七層模型 * OSL七層網絡模型稱爲開放式系統互連參考模型,是一個邏輯上的定義和規範 * 把網絡從邏輯上分爲了七層,每一層都有相關,相對應的物理設備,比如路由器,交換機。 * OSL七層模型

原创 數據結構之迷宮最短路徑求解

上一篇我們講了求解迷宮是否有出路的問題,這篇我們在迷宮有多條路的情況下怎麼求出最短路徑 我們的思路是建立兩個棧,一個當前路徑棧,一個最短路徑棧,最開始的時候最短路徑棧是空,我們把一條迷宮路徑的所有節點都入棧,然後與最短路經比較,

原创 數據結構之哈希擴展——布隆過濾器

背景:在日常生活中,包括在設計計算機軟件時,我們要經常判斷一個字符串是否在一個集合中,一個英語單詞是否拼寫正確。最直接的辦法就是將集合中的所有元素都存在計算機中,遇到一個新元素,將它和集合中的元素直接比較即可。一般來講計算機中的集

原创 數據結構之哈希衝突解決方法(開放地址法)

首先我們來了解一下什麼叫做哈希表 在順序搜序偶以及二叉搜索樹種,元素存儲位置和元素個關鍵碼之間沒有對應關係,因此在查找一個元素時,必須要經過關鍵碼的多次比較。 而我們理想的搜索方法:可以不經過任何比較,一次直接可以從表中得到想

原创 Linux(十五)進程間關係和守護進程

進程組/作業/會話 1.進程組 每個進程除了進程ID之外,還屬於一個進程組。進程組是一個或多個進程的集合。通常,他們與一個作業相關聯,可以接受來自同一終端的各種信號。每個進程組有一個唯一的進程組ID。每個進程組都可以有一個組長進

原创 Linux(十八)網絡基礎:深入認識UDP(編寫UDP服務器)

UDP協議端格式 16位UDP長度,表示整個數據報(UDP首部+UDP數據)的最大長度; 如果校驗和出錯,就會直接丟棄 UDP特點 UDP傳輸的過程類似於寄信 *無連接:知道對短的IP和端口號就可以直接進行傳輸,不需要建立

原创 數據結構之二叉搜索樹的基本操作

二叉查找樹(Binary Search Tree) 二叉搜索樹(又:二叉搜索樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹

原创 Linux(十四)線程控制(gdb調試多線程程序)

GDB默認支持調試多線程,跟主線程 查詢線程:info threads 切換調試線程: thread +線程編號 測試函數 #include <stdio.h> #include <stdlib.h> #include <u

原创 Linux(十七)網絡基礎:網絡編程套接字

理解源IP地址和目的IP地址 在IP數據包頭部中,有兩個IP地址,分別叫做源IP地址,和目的IP地址 認識端口號 端口號是傳輸層協議的內容 端口號是一個2字節十六位的整數 端口號用來標識一個進程,告訴操作系統,當前的這個數據要

原创 Linux(十三)線程(信號量與生產者與消費者模型)

在前面的進程控制裏面我們說到了System V版本的信號量,主要用於進程控制。同樣,線程控制裏面也有相應的信號量,它用於線程間同步,就是我們下面要講的Posix信號量 說到信號量,我們都明白,信號量就相當於一個計數器,它的目的是

原创 數據結構之哈希變形——位圖

背景:海量數據處理 筆試題:給四十億不重複的無符號,整形,沒排過序。給一個無符號整數,如何快速判斷一個數是否在這四十億個數中 在這裏我們就可以用到我們的哈希思想。 位圖:我們只需要表示這個數字存不存在的話,只需要一個比特位即可

原创 數據結構之動態通訊錄的實現

動態通訊錄包括了動態申請內存, **插入聯繫人; 刪除聯繫人; 查找聯繫人; 排序聯繫人; 清空聯繫人; 修改聯繫人; 顯示所有聯繫人;** 下面來看代碼 首先,我們要做好我們的準備工作 ** adress.h

原创 C語言之模擬實現strncopy,strncat,strncmp

模擬實現strncopy #include <stdio.h> #include <string.h> #include <stdlib.h> char *mystrncopy(char *dest,const char *sr

原创 Linux(十九)網絡基礎:編寫簡單的TCP服務器

首先我們來說用到的函數 socket #include <sys/types.h> #include <sys/socket.h> int socket(int domain,int type,int protocol); *s