原创 【lintcode】圖是否是樹

給出 n 個節點,標號分別從 0 到 n - 1 並且給出一個 無向 邊的列表 (給出每條邊的兩個頂點), 寫一個函數去判斷這張`無向`圖是否是一棵樹 注意事項 你可以假設我們不會給出重複的邊在邊的列表當中. 無向邊 [0, 1

原创 【Linux】I/O多路複用—select和pselect

select函數 #include <sys/select.h> int select(int maxfdp1, fd_set *restrict readfds, fd_set *restrict writefds,

原创 【Linux】線程同步—屏障(實現多線程排序算法)

屏障與互斥量、讀寫鎖等不同,它不是用來保護臨界區的,而是與條件變量類似,是一種線程之間的同步機制。屏障允許每個線程等待,直到所有合作線程都到達某一點,然後從該點繼續執行。pthread_join就是一種屏障,它允許線程等待直到另一

原创 【Linux】線程同步—互斥量

在講互斥量之前,先明確下面兩個概念: 競爭條件:兩個或多個進程(或線程)讀寫某些共享數據,最終結果取決於進程(或線程)運行的精確時序,被稱爲競爭條件。 臨界區: 對共享內存進行訪問的程序片段。 通過適當安排使得兩個進程(或線

原创 【Linux】I/O多路複用—poll

poll類似於select,但是接口有所不同。 原型 #include <poll.h> int poll(struct pollfd fdarray[], nfds_t nfds, int timeout); 返回值:準備就緒的

原创 【Linux】線程特定數據

概述 線程特定數據(線程私有數據)是存儲和查詢某個特定線程相關數據的一種機制,使用這種機制是因爲我們希望每個線程可以訪問它自己單獨的數據副本,而不需要擔心與其他線程的訪問同步問題。 線程的好處就在於促進了進程中數據和屬性的共享,

原创 top k 問題的幾種解決方法

top k問題是指給定一組數量爲n的數,從中找出前k大的數或第k大的數(k <= n)。由於只要能找出前k大的數,即可以得到第k大的數。所以下面先介紹解決前k大數問題的幾種思路: 1.部分排序 由於我們只需要找到數組nums的前k

原创 【Linux】線程和信號

相比於進程中的信號處理,在線程中更加複雜,線程中的信號處理有如下特點: 每個線程都有自己的信號屏蔽字,但是信號的處理是進程中所有線程共享的。這意味着單個線程可以阻止某個信號,但是當某個線程修改了一個信號的處理行爲,那麼所有線程都

原创 linux下pthread的編譯

今天在linux下寫一個多線程程序時,在.c 文件中包含了頭文件< pthread.h> ,但是編譯時卻報錯: 對‘pthread_create’未定義的引用 上網查了下,原來pthread庫不是linux默認的庫,所以在編譯時

原创 【Linux】線程的終止

線程的終止分爲兩種情況,一是隨着它所屬進程的終止而終止,二是僅有單個線程自己終止。 對於第一種進程終止的情況: 如果進程中的任意線程調用了exit、_Exit、或_exit,那麼整個進程就會終止,當然屬於這個進程的所有線程也會

原创 【算法】並查集—帶路徑壓縮的按秩合併法

讀了《算法導論》的21章:用於不相交集合的數據結構 後在這裏對並查集算法做一個小結。 對於動態集合的表示有多種方法,例如鏈表和有根樹。不論是哪種表示,我們都用一個代表來標識一個集合,這個代表就是該集合中的某個成員。 並查集算法

原创 【Linux】線程的創建

線程ID 類似於進程ID,線程ID用於表示線程,使用類型pthread_t來表示。 該類型在不同的系統中實現的方式也不相同,Linux中使用無符號長整型,而在其他實現中可能使用結構指針,所以考慮到可移植性,對於該類型儘量不要直接

原创 C/C++中指針的引用小結

我們知道C語言中,對於函數參數的傳指針操作本質上仍然是一個傳值過程,只是將實參指針的值傳遞給了函數中的一個臨時變量,實質上我們傳入函數的只是一塊內存的地址,而非指針本身。所以如果在函數中改變形參指針所指向的地址,實參指針的指向是不

原创 Linux下C程序的編譯和鏈接

這篇博文是在讀了《CSAPP》中的鏈接部分後做的總結和摘錄。 linux編譯過程 命令:gcc -o prog main.c 過程: main.c —>預處理器(cpp)—>main.i —>編譯器(ccl) —>main.s

原创 C語言static關鍵字小結

在C語言中,static關鍵字用於普通變量和函數,它用於定義一個靜態的變量或函數。下面對於它們各自的特點進行一下小結: 靜態全局變量 在函數外部定義的變量前加上關鍵字static,這樣定義的變量就是一個靜態全局變量,有如下特點: