线程

线程

进程是资源分配的最小单位,每个进程都是有独立的内存空间,线程是程序执行的最小单位。多个线程共享同一个内存空间。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。

总的来说就是进程有独立的地址空间,线程没有单独的地址空间,同一进程内的所有线程共享内存空间。那么线程相对于进程的优势是什么呢:

  • 线程不需要额外的内存申请

  • 线程共享进程内的数据,访问数据方便。而进程则需要通过通信的方式进行

进程使用 ps 的方式查看,线程则可以通过 top 的方式进行查看。还可以通过 top -p pid 的方式进行某个进程内的线程查看。

线程创建

void *mythread1(void)
{
int i;
for(i=0;i<5;i++)
{
printf("This is the first thread\n");
sleep(1);
}
}
void *mythread2(void)
{
int i;
for(i=0;i<5;i++)
{
printf("This is the second thread\n");
sleep(1);
}
}
void main(int argc,char* argv[])
{
int ret=0;
pthread_t id1,id2;
pthread_create(&id1,NULL,(void *)mythread1,NULL);
pthread_create(&id2,NULL,(void *)mythread2,NULL);
pthread_join(id1,NULL);
pthread_join(id2,NULL);
}
// gcc -o test1 test1.c -lpthread

mythread1 和 mythread2 两个函数分别属于不同的线程。pthread_t 是线程的 id.。pthread_create 是创建线程的函数。其中的第一个为线程 id。第二个参数指线程的属性,这里设置位空。第三个参数:线程运行函数的起始地址。第四个参数:运行函数的参数。这里也设置位空。