Linux 线程

**

Linux线程编程:

**

1.线程:它是一个进程内的基本调度单位,也可呀称为轻量级进程。
线程就是一条执行路径。

2.特点:(1)比进程上下文切换开销小。
(2)一个进程内部的多个线程,共享进程的资源和地址空间。
(3)一个进程内部的多个线程,各自有自己独立的栈空间,用来存放它的返回值等。

3.线程创建:pthread_create()
线程的退出函数:pthread_exit() :只是所调用的函数退出,其他函数不受影响
exit(0) 不管是哪个线程调用,都会让整个线程退出。
等待线程结束的函数:pthread_join()

4.全局变量:所有线程可以访问。
创建线程时,是可以传递参数。

练习:创建2个子线程,子线程1打印1-20的偶数;子线程2打印1-20的奇数。

5.互斥锁:pthread_mutex()

6.信号量的线程控制-互斥和同步
信号量:是操作系统中所用到的PV原语,它广泛用于进程或线程间的同步与互斥,它本质上是一个非 负数的整数计数器
pv:原语是对整数计数器信号量的sem的操作:
一次p操作使 sem减一(分配资源);当sem的值大于或等于0;则上锁成功(拥有访问权)
当sem的值小于0;则阻塞;
而一次 v操作使sem加一(释放资源)

7.互斥:同一时刻,只允许一个线程或者进程访问。
用一个信号量 sem =1;
同步 : 多个线程或进程,按一定的顺序执行。
使用到多个信号量。如sem 1 =1; sem = 0;

8.网络编程
1.TCP/IP协议族

2.TCP 传输控制协议 , UDP用户数据报文协议 在传数层

3.每台电脑或者服务器有一个或者多个网络适配器,每个网络适配器(节点)都有一个IP
目前应用的是IPV4,4个节点,本身是一个整形数,“点.分”十进制,如:192.168.0.112

4.流式套接字(SOCK_STREAM)
流式的套接字可以提供可靠的,面向连接的通讯流。它使用了TCP协议。TCP保证了数据传输的正确性和顺序性。

5,一个网络适配器(节点)用IP地址区分。一个网络适配器可能有多个应用程序,通过端口号来识别是哪个应用程序。

6.流程图

OSI 7是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。
每层利用紧邻的下层服务。
Linux 线程

7、6、5、4层定义了应用程序的功能,下面3层,既3、2、1层主要面向通过网络的端到端的数据流。

(1)应用层:与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的。示例:telnet(允许用户登录进入远程主机系统。),HTTP(超文本传送协议),FTP(File Transfer Protocol),WWW(万维网),NFS(网络文件系统),SMTP(简单邮件传输协议)等。

(2)表示层:这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASII格式,发送方将把文本从发送方的字符集转换成标准的ASII后发送数据。在接收方将标准的ASII转换成接收方计算机的字符集。示例:加密,ASII等。

(3)会话层:他定义了如何开始、控制和结束一个会话。

(4)传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP。

(5)网络层:这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址、路由选择、数据报文的分段。如IP。

(6)数据链路层:他定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。

(7)物理层:OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。连接头、针、针的使用、电流、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。