線程基本操作 (1)簡介
在單進程環(huán)境中,執(zhí)行多個任務(wù).
一個進程中的所有線程都可以訪問該進程的組成部件(文件描述符,內(nèi)存...).
共享總會帶來一致性問題,需要有同步機制.防止多個線程在共享資源時出現(xiàn)不一致的問題.

線程的好處,
1,同步編程模式,用于簡化異步事件的處理.
2,多個進程,必須使用操作系統(tǒng)提供的復(fù)雜機制才能實現(xiàn)內(nèi)存和文件描述符的共享.
多個線程則簡單許多,可以自動的訪問相同的存儲地址空間和文件描述符.
3,把串行的邏輯并行化.
4,加快響應(yīng),可以把交互的部分,如用戶輸入部分,與程序中其他部分分開.
5,雖然,多線程程序在串行任務(wù)中不得不用阻塞編程,但在阻塞的時候,仍可以進行其他線程,所以程序整體的吞吐量和時間響應(yīng)是有改善的.
進程,線程都包含哪些東西:
線程是程序最基本的運行單位,而進程不能運行.進程可以看做容器.
進程包含線程運行所需要的:數(shù)據(jù)結(jié)構(gòu),環(huán)境變量等數(shù)據(jù).
每個線程都包含有表示執(zhí)行環(huán)境所必須的信息,
1,進程中標識線程的線程ID,
2,一組寄存器值,
3,棧
4,調(diào)度優(yōu)先級和策略,
5,信號屏蔽字,
6,errno變量,
7,線程私有數(shù)據(jù),
一個進程的所有信息,對該進程的所有線程都是共享的,包括:
1,可執(zhí)行程序的代碼,
2,程序的全局內(nèi)存和堆內(nèi)存,
3,棧,
4,文件描述符
進程與線程的對比:
1,籠統(tǒng)的說: 大程序用進程,小程序用線程;
2,進程切換開銷大:運行代碼多,消耗時間長.
3,進程通信較為麻煩.每個進程都由各自的地址空間,相互獨立.并且隔離.
4,進程創(chuàng)建的速度慢.
5,多線程在多核處理器上有更大的優(yōu)勢.
6,多線程編程難度高,需要考慮線程安全,信號處理等問題.
串行: 每次只做一件事,一件接著一件做;
并發(fā):交替做不同的事;
并行:同時做不同的事;

線程標識(線程ID)
線程ID,就像一個人的身份證,是系統(tǒng)頒發(fā)的,不需要指定.需要定義一個變量保存就行了.
linux中很多思想都是這樣,一些可以讓系統(tǒng)自己管理的,都會自行管理,然后會有接口進行數(shù)據(jù)的操作.
進程ID: pid_t 的結(jié)構(gòu)體.
線程ID: pthread_t 的結(jié)構(gòu)體.

函數(shù)
linux系統(tǒng)中定義了ID這個參數(shù),
而這個參數(shù)是linux自己分配的,也就是它要進行管理,
所以也就有了操作這個ID參數(shù)對應(yīng)的函數(shù).
(編程的思路就是這樣,創(chuàng)建一些變量,結(jié)構(gòu)體,,,,然后再創(chuàng)建一些函數(shù)操作,搬運這些數(shù)據(jù).)
1,獲取線程本身的ID
2,對兩個線程ID值進行比較
可以通過mam,進行查看系統(tǒng)留給我們操作變量的函數(shù).

上圖中: Compile and link with -pthread 就是說要手動鏈接到pthread庫才行.
關(guān)于pthread的其他函數(shù)基本也需要.
所以為了方便,可以建立一個Makefile,在里面輸入下面的內(nèi)容,然后編譯的時候,直接make就行:
CFLAGS+=-pthread
LDFLAGS+=-pthread
上面的 CFLAGS 和 LDFLAGS 都是Makefile的參數(shù).
CFLAGS,是GCC編譯選項參數(shù).
LDFLAGS,是GCC鏈接選項參數(shù).

包含有線程的程序結(jié)構(gòu):(如何利用線程,搭起程序框架)
