加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

线程是 操作系统调度的最小单位

发布时间:2023-02-04 10:57:26 所属栏目:Linux 来源:
导读:  线程是操作系统调度的最小单位

  线程拥有自己独立的栈空间

  临界区: 访问共享资源的一段代码, 资源通常是一个变量或数据结构

  竞争条件: 多个执行的线程大致同时进入临界区,都试图跟新
  线程是操作系统调度的最小单位
 
  线程拥有自己独立的栈空间
 
  临界区: 访问共享资源的一段代码, 资源通常是一个变量或数据结构
 
  竞争条件: 多个执行的线程大致同时进入临界区,都试图跟新数据结构
 
  此时会出现运行结构不确定性
 
  为什么会出现这种不确定性?
 
  试想线程A在CPU中修改了共享变量的值,线程已经运行完,还没来得及写回内存,就被线程B抢走时间片,那么就会出错。
 
  为了避免这些问题,线程应该使用某种互斥机制,这样保证只有一个线程进入临界区,从而避免出现竞争,并产生确定的程序输出。
 
  线程创建的API函数是
 
  pthread_create(....)
 
  其中有四个参数,第一个参数是指向pthread_t 结构体的指针,利用这个结构体与线程进程交互, 第二个参数指定线程可能具有的属性,默认情况,直接填NULL, 第三个参数是一个函数指针,这个函数的返回值必须为void*,第四个参数是一个vod*类型的指针,是第三个函数的参数。需要将这个类型转为需要的参数使用。
 
  线程创建完后,通常使用pthread_join(...)函数启动,并且主线程等待线程函数执行完毕线程池linux,这个函数同样有两个参数,第一个参数是线程的pthread_t结构体,第二个参数是void*,用来得到返回的参数。
 
  互斥锁:
 
  多个线程访问临界区时,需要加锁,使得只有一个线程能进入临界区,加锁的API函数有
 
  pthread_mutex_t lock;
  pthread_mutex_init(&lock)
  pthread_mutex_lock(&lock)
  // 临界区
  pthread_mutex_unlock(&lock)
  条件变量:
 
  当线程之间发生某种信号,如果一个线程在等待另一个线程继续执行某些操作,条件变量很有用。
 
  调用逻辑如下:
 
  pthread_mutex_t lock = PTHREAD_MUTEX_INITALIZER;
  pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
  Pthread_mutex_lock(&lock);
  while (ready == 0){
      Pthread_cond_wait(&cond,&lock)
  }
  Pthread_mutex_unlock(&lock)
  唤醒线程的代码如下
 
  Pthread_mutex_lock(&lock);
  ready = 1;
  Pthread_cond_signal(&cond);
  Pthread_mutex_unlock(&lock);
 

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!