Linux多进程之线程通信

多线程应该是Linux应用设计中最普遍的技术了,那么线程和进程到底啥关系,这里记录下个人的理解。

  • 进程>线程。
  • 一个进程就是一个应用程序;
  • 一个应用程序中多个任务就是多线程。

线程ID:进程内部的每个线程都有一个唯一标识,称为线程ID。

创建线程:pthread_create()

终止线程:pthread_exit()

连接线程:pthread_join()

大量书本文章会讲得进程间通信,很少提及线程间通信,为什么?

因为线程间数据共享很简单,一个全局变量就可以做到。

进程间的数据共享就需要管道、共享内存等了,实质进程间是不同的程序。

在多线程中应避免使用信号。

在多线程程序中,多个线程并发执行一个程序,所有线程共享相同的全局和堆变量,但每个线程都配有用来存放局部变量的私有栈。

涉及到共享数据的处理,多线程编程中最重要的技术线程同步。

提供了二个工具:

互斥量 mutexe

条件变量 condition variable

1.互斥量(又名互斥锁)

互斥量类似一把锁,用来保护数据,防止几个线程同时访问修改统一数据,加锁后同一时刻只有一个线程能够处理,其他线程阻塞。最常用的就是对全局变量的保护。

pthread_mutex_lock()         上锁

pthread_mutex_unlock()         解锁

一定注意应该成对使用,操作数据前上锁,操作后解锁。避免死锁。

2.条件变量

条件变量允许一个线程就某个共享变量的状态变化通知其他线程,并让其他线程等待这一通知。

pthread_cond_signal()         唤醒一个阻塞的线程

pthread_cond_broadcast()        唤醒所有阻塞的线程

pthread_cond_wait()        等待条件变量

多用于在某个子线程平时不执行,当满足某一条件时,在主线程发出消息,子线程再执行的情况。

注意:互斥量和条件变量都需要初始化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值