Linux线程

1.线程创建和退出

创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是 pthread_create。 在线程创建以后,就开始运行相关的线程函数,在该函数运行完之后,该线程也就退出了,这也 是线程退出一种方法。另一种退出线程的方法是使用函数 pthread_exit,这是线程的主动行为。

注意:在此需要区分exit函数,此函数用来终止进程而不是线程。使用此函数会使多个线程终止。

由于一个进程中的多个线程是共享数据段的,因此通常在线程退出之后,退出线程所占 用的资源并不会随着线程的终止而得到释放。正如进程之间可以用 wait()系统调用来同步终 止并释放资源一样,线程之间也有类似机制,那就是 pthread_join()函数。pthread_join 可以用 于将当前线程挂起,等待线程的结束。这个函数是一个线程阻塞的函数,调用它的函数将一 直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源就被收回。

pthread_join()函数在程序中往往是指等待其他结束,而不是对线程本身进行阻塞,这里容易误解。

几个函数的使用:

pthread_create 函数语法要点:

 pthread_exit 函数语法要点:

pthread_join 函数语法要点:

 

 修改线程属性:

· 绑定属性

· 分离属性

pthread_attr_init 函数语法要点:

pthread_attr_setscope 函数语法要点:

pthread_attr_setdetachstate 函数语法要点:

pthread_attr_getschedparam 函数语法要点:

 

pthread_attr_setschedparam 函数语法要点:

线程访问控制 

由于线程共享进程的资源和地址空间,因此在对这些资源进行操作时,必须考虑到线程 间资源访问的惟一性问题,这里主要介绍 POSIX 中线程同步的方法,主要有互斥锁和信号量 的方式.

1.mutex 互斥锁线程控制 (1)函数说明 mutex 是一种简单的加锁的方法来控制对共享资源的存取。这个互斥锁只有两种状态, 也就是上锁和解锁,可以把互斥锁看作某种意义上的全局变量。在同一时刻只能有一个线程 掌握某个互斥上的锁,拥有上锁状态的线程能够对共享资源进行操作。若其他线程希望上锁 一个已经上锁了的互斥锁,则该线程就会挂起,直到上锁的线程释放掉互斥锁为止。可以说, 这把互斥锁使得共享资源按序在各个线程中操作。 互斥锁的操作主要包括以下几个步骤。 · 互斥锁初始化:pthread_mutex_init · 互斥锁上锁:pthread_mutex_lock · 互斥锁判断上锁:pthread_mutex_trylock · 互斥锁接锁:pthread_mutex_unlock · 消除互斥锁:pthread_mutex_destroy 其中,互斥锁可以分为快速互斥锁、递归互斥锁和检错互斥锁。这三种锁的区别主 要在于其他未占有互斥锁的线程在希望得到互斥锁时的是否需要阻塞等待。快速锁是指 调用线程会阻塞直至拥有互斥锁的线程解锁为止。递归互斥锁能够成功地返回并且增加 调用线程在互斥上加锁的次数,而检错互斥锁则为快速互斥锁的非阻塞版本,它会立即 返回并返回一个错误信息。

thread_mutex_init 函数语法要点:

pthread_mutex_lock 等函数语法要点:

 

信号量线程控制

信号量也就是操作系统中所用到的 PV 原语,它广泛用于进程或 线程间的同步与互斥。信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的 访问。这里先来简单复习一下 PV 原语的工作原理。

函数说明 Linux 实现了 POSIX 的无名信号量,主要用于线程间的互斥同步。这里主要介绍几个常 见函数。 · sem_init 用于创建一个信号量,并能初始化它的值。 · sem_wait 和 sem_trywait 相当于 P 操作,它们都能将信号量的值减一,两者的区别在 于若信号量小于零时,sem_wait 将会阻塞进程,而 sem_trywait 则会立即返回。 · sem_post 相当于 V 操作,它将信号量的值加一同时发出信号唤醒等待的进程。 · sem_getvalue 用于得到信号量的值。 · sem_destroy 用于删除信号量。 

sem_init 函数语法要点:

sem_wait 等函数语法要点:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值