线程基本操作 (1)简介
在单进程环境中,执行多个任务.
一个进程中的所有线程都可以访问该进程的组成部件(文件描述符,内存...).
共享总会带来一致性问题,需要有同步机制.防止多个线程在共享资源时出现不一致的问题.

线程的好处,
1,同步编程模式,用于简化异步事件的处理.
2,多个进程,必须使用操作系统提供的复杂机制才能实现内存和文件描述符的共享.
多个线程则简单许多,可以自动的访问相同的存储地址空间和文件描述符.
3,把串行的逻辑并行化.
4,加快响应,可以把交互的部分,如用户输入部分,与程序中其他部分分开.
5,虽然,多线程程序在串行任务中不得不用阻塞编程,但在阻塞的时候,仍可以进行其他线程,所以程序整体的吞吐量和时间响应是有改善的.
进程,线程都包含哪些东西:
线程是程序最基本的运行单位,而进程不能运行.进程可以看做容器.
进程包含线程运行所需要的:数据结构,环境变量等数据.
每个线程都包含有表示执行环境所必须的信息,
1,进程中标识线程的线程ID,
2,一组寄存器值,
3,栈
4,调度优先级和策略,
5,信号屏蔽字,
6,errno变量,
7,线程私有数据,
一个进程的所有信息,对该进程的所有线程都是共享的,包括:
1,可执行程序的代码,
2,程序的全局内存和堆内存,
3,栈,
4,文件描述符
进程与线程的对比:
1,笼统的说: 大程序用进程,小程序用线程;
2,进程切换开销大:运行代码多,消耗时间长.
3,进程通信较为麻烦.每个进程都由各自的地址空间,相互独立.并且隔离.
4,进程创建的速度慢.
5,多线程在多核处理器上有更大的优势.
6,多线程编程难度高,需要考虑线程安全,信号处理等问题.
串行: 每次只做一件事,一件接着一件做;
并发:交替做不同的事;
并行:同时做不同的事;

线程标识(线程ID)
线程ID,就像一个人的身份证,是系统颁发的,不需要指定.需要定义一个变量保存就行了.
linux中很多思想都是这样,一些可以让系统自己管理的,都会自行管理,然后会有接口进行数据的操作.
进程ID: pid_t 的结构体.
线程ID: pthread_t 的结构体.

函数
linux系统中定义了ID这个参数,
而这个参数是linux自己分配的,也就是它要进行管理,
所以也就有了操作这个ID参数对应的函数.
(编程的思路就是这样,创建一些变量,结构体,,,,然后再创建一些函数操作,搬运这些数据.)
1,获取线程本身的ID
2,对两个线程ID值进行比较
可以通过mam,进行查看系统留给我们操作变量的函数.

上图中: Compile and link with -pthread 就是说要手动链接到pthread库才行.
关于pthread的其他函数基本也需要.
所以为了方便,可以建立一个Makefile,在里面输入下面的内容,然后编译的时候,直接make就行:
CFLAGS+=-pthread
LDFLAGS+=-pthread
上面的 CFLAGS 和 LDFLAGS 都是Makefile的参数.
CFLAGS,是GCC编译选项参数.
LDFLAGS,是GCC链接选项参数.

包含有线程的程序结构:(如何利用线程,搭起程序框架)
