菜鸟lei的学习成长空间

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

     最近找工作时候,被问到进程和线程的区别,我只是简单的解释了下线程可以访问进程的资源,而且中途把进程组的概念和线程搞混了。后面回过头去看了看linux上的线程的用法,发现之前有很多误解。因此再回过头看看。

    1. 进程是操作系统层面管理任务的基本单位,线程是包含在进程内去运行,不能单独跑。

        我们很多时候用不到多线程,而main函数里面串行跑的这一部分当做是主线程。

    2. 操作系统分配资源是按进程去分配,而不是线程

    3. 进程可以包含多个线程,这些线程之间是同步执行,在一些资源上存在互斥,而且线程中可以创建其他线程

    4. 线程共享了它所在的进程的资源,这块从代码上也可以看出来

    linux上的线程,有一个pthread库,我在网上找了一个用法,看了示例代码后,明白了很多。

#include <stdio.h> // printf
#include <pthread.h> // pthread_create
#include <stdlib.h> // exit
#include <unistd.h> // usleep

void * thread( void * par){
  int i;
  for( i = 0; i < 30; i ++){
   printf( "This is a pthread.\n");
   usleep( 1000);
  }
  return 0;
}

int main(void){
  pthread_t id;
  int i,ret;
  ret = pthread_create( &id, NULL, thread, NULL);
  if( ret != 0){
   printf( "Create pthread error!\n");
   exit( 1);
  }
  for( i = 0; i < 30; i ++){
   printf( "This is the main process.\n");
   usleep( 330);
  }
  pthread_join( id, NULL);
  return( 0);
}

    对于main函数而言,如果没有生成其他线程,代码是串行跑的,可以认为是主线程,而使用了pthread_create函数,生成一个新起的线程。这个新起的线程,和主线程,在运行时候都被包含在同一个进程里面,从进程外面看,这个进程用到的资源自然是内部线程大家共有的。而且,我们也可以看到,单从代码级别来看,pthread_create创建出来的线程,因为代码作用域,他其实是可以访问main函数里面的变量,或者main函数外层(全局)的变量的。所以这也是说线程能访问进程资源。

posted on 2020-03-22 12:04  菜鸟-雷  阅读(247)  评论(0编辑  收藏  举报