进程与线程
程序中的一个执行路线就叫做线程(thread)。线程是“一个进程内部的控制序列”,一个进程中最少有一个线程。进程是资源竞争的基本单位,而线程是程序执行的基本单位,一个进程中的多个线程共享进程数据,但也有自己的数据。

进程中线程的共享数据与私有数据
共享:代码段,数据段,文件描述符,信号。
私有:线程ID,寄存器,栈,程序计数器,errno。

创建进程与线程的区别
进程:当一个进程执行一个fork调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和它自己的PID。这个新进程的运行时间是独立的,它在执行时几乎完全独立于创建它的进程。
线程:在进程里面创建一个新线程的时候,新的执行线程会拥有自己的堆栈(因此也就有自己的局部变量),但要与它的创建者共享全局变量、文件描述符、信号处理器和当前的工作目录状态。
线程竞争范围
操作系统提供了各种模型,用来调度应用程序创建的线程。这些模型之间的主要不同是:在竞争系统资源(特别是CPU时间)时,线程调度竞争范围不一样。
进程竞争范围:各个线程在同一进程竞争“被调度的CPU时间”。
系统竞争范围:线程直接和“系统范围”内的其他线程竞争。
线程函数
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);创建一个新的线程
void pthread_exit(void *retval);
线程终止
int pthread_join(pthread_t thread, void **retval);
等待线程结束
pthread_t pthread_self(void);
返回线程ID
int pthread_cancel(pthread_t thread);
取消一个线程
int pthread_detach(pthread_t thread);
将一个线程从进程中分离
代码实例
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<string.h>
typedef struct data
{
int num;
} Data;
void *func(void *arg)
{
Data *p=(Data*)arg;
printf("coming into thread ,id is %u the num is %d\n",pthread_self(),p->num);
p->num=30;
pthread_exit(arg);
}
int main(int argc,char* argv[])
{
pthread_t t;
Data s;
s.num=10;
pthread_create(&t,NULL,func,&s);
Data *ptr=NULL;
sleep(5);
pthread_join(t,&ptr);
printf("new num is %d",ptr->num);
return 0;
}

被折叠的 条评论
为什么被折叠?



