原创 函數指針、指針函數、指針數組、數組指針

函數指針是一個指向函數的指針,即它是一個指針變量,只不過這個指針指向一個函數。函數指針的定義: 返回值類型 (*指針變量名)(形參列表);int (*fun)(int a,int b);注意:1)聲明函數指針時必須和要指向的函數返回值以

原创 多線程的控制與分離

線程:相當於進程的一個執行流。一個進程可以有多個執行流,也就是說一個進程可以有多個線程。一個只有一個執行流的進程也可以看做線程。線程是操作系統調度和分派的基本單位。  雖然一個進程中的多個線程共享一份地址空間,但每個線程也有各自私有的資

原创 讀寫者問題------讀寫鎖

讀寫者問題是一類比較特殊的問題。可以允許多個讀者同時讀,但不允許多個寫者或者寫者和讀者同時操作。所以需要保證讀者和寫者之間的同步與互斥關係,以及多個寫者之間的互斥關係。讀寫鎖是一種自旋鎖:自旋鎖是當一個線程沒有申請資源成功,不會等待,而

原创 進程間通信----pipe 、fifo

進程是一個獨立的單元,每個進程各自有不同的地址空間,任何一個進程的信息在另一個進程都是不可見的,所以兩個進程間要想交換數據就必須通過內核。  而管道(pipe)就是一種實現進程間通信的一箇中間介質。它是指用於連接一個讀進程和一個寫進程,

原创 關鍵字-----static 、const、inline、volatile....

static:作用:1)未被初始化的靜態變量初始化爲0。如果一個全局或局部變量加上關鍵字static,則它的默認初始化值就爲0。2)隱藏(鏈接屬性 )。如果一個變量或函數加上關鍵字static,則它只能在本文件內有效,其他文件是不能訪問

原创 進程 線程 的區別

線程相當於進程的一個執行流,多個線程共享同一進程的地址空間以及共享以下進程資源和環境:1. 文件描述符表2. 每種信號的處理方式(SIG_IGN、SIG_DFL或者自定義的信號處理函數)3. 當前工作目錄4. uid、gid線程獨立的資

原创 IPC------共享內存

共享內存:在其物理內存上創建出一塊內存區,然後將兩個或多個進程掛接到這塊內存上,這樣這塊內存區就是這兩個進程共享的了。此後,在任何一個進程內進行操作,另一個進程也可見。當不再需要這塊共享資源時,再將進程分別與該內存區斷開。  共享內存是

原创 IPC------信號量

先了解幾個概念:臨界資源:在一段時間內只允許一個進程訪問的資源。臨界區:每個進程中訪問臨界資源的那段代碼稱爲臨界區。進程互斥:兩個或兩個以上進程不能同時訪問臨界資源。進程同步:異步環境下一組併發進程因相互制約關係而有序的執行。信號量:對

原创 線程同步與互斥--------信號量(semaphore)

該信號量是POSIX版本的。是用於線程間同步與互斥的。和進程間的信號量類似,都是管理臨界資源的,都有P、V操作,只不過它的P、V操作是用下面的函數接口實現的int sem_wait(sem_t *sem);P操作 資源 -1;申請資源 

原创 線程 同步與互斥-------消費者 生產者模型

線程互斥用互斥鎖,線程的同步則用到條件變量。條件變量是用來描述線程間同步的。下面以生產者、消費者爲例生產者和消費者之間存在同步與互斥的關係。生產者之間、消費者之間存在互斥的關係  #include<stdio.h>   #include

原创 semop SEM_UNDO

當操作信號量semop時 sem_flg可以被設置爲0或SEM_UNDOSEM_UNDO :程序結束時(正常或異常),保證信號量會被重設爲調用semop()前的值。這樣避免了程序在異常結束時未將鎖定的資源解鎖,造成該資源永遠鎖定。

原创 信號SIGCHLD

SIGCHLD是子進程退出後發送給父進程的信號。下面的程序可以顯式的看出子進程退出後發送給父進程的信號是SIGCHLD。可以用SIGCHLD的自定義動作來wait子進程資源。這樣每次子進程退出後,父進程收到SIGCHLD信號就會wait

原创 線程同步與互斥 以及死鎖問題

當多個線程同時訪問共享數據時,可能會由於線程間不斷切換導致操作系統的多次調用,從而引起訪問衝突。想要解決這個問題,我們可以爲這份共享數據加入互斥鎖。互斥鎖的內部實現:lock:    movb $0 %al    xchgb %al m

原创 IPC-----消息隊列

消息隊列(報文隊列):兩個進程間通過發送數據塊的形式進行通信。一個進程把需要發送的消息通過一個函數發送到消息隊列中,另一個進程再從消息隊列中讀取該消息。函數:# include <sys/types.h># include <sys/i

原创 SQL語句學習筆記☞select(待完善...)

1.查詢整個表中所有語句:select *from tablename 2.查詢某一列或幾列: select column1,column2... from tablename 3.去重:SELECT DISTINCT column_