了解多线程与多进程

多线程

  • 多线程:一个应用程序中有多个执行部分可同时执行,同一时间完成多项任务,以提高资源使用效率。如:QQ软件可同时实现播放音效、消息发送等功能
  • Python标准库提供的2个模块:_thread(低级模块)、threading(高级模块,已对_thread进行封装)
  • 启动一个线程:创建线程+执行线程。把一个函数传入并创建Thread实例,然后调用start()开始执行
  • 注意:多线程执行时的"同时"非同一时刻,而是同一时间段内

线程锁

  • 线程锁:解决某个线程执行到一半又去执行另一个线程,导致的多线程执行产生错乱。具体表现为:多线程执行过程中,将每个子线程执行的代码作为一个完整的单元进行锁定,执行某个单元未完成时不跳出执行,执行完成一个完整的单元即进行解锁释放。

线程生命周期(按状态描述)

在这里插入图片描述

多线程程序的生命周期

  • 多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
  • 原因:
    • 线程同步:当软件中要用到多线程,当1号线程运行变量要等待另2号线程的结果时,1号和2号线程就要同步,也就是一个线程要等待另一个线程,或是相互等待。
    • 线程安全:比两个或两个以上软件要同时操作(主要指写操作)一个全局变量时,这个时间点不能相同,这样两个线程的操作会造成程序崩溃,也就是这个状态称为线程不安全(一般用全局信号量来调整两个线程的写入时间点,防止冲突)
    • 线程死锁:当线程为了安全及同步时,用全局信号量进行相互等待或是相互制约时程序进入了一个死锁状态时(两个线程都停掉了)叫线程死锁。

多进程

  • 多进程可实现同一时间点多个任务并行。举例:电脑能够同时开启多个软件

进程锁

  • 加锁可以保证多个进程修改同一块数据时,同一时间只能有一个任务可以进行修改,即串行的修改,虽然保证了数据安全,但是降低了效率。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛应用于系统编程的编程语言,支持多进程多线程编程。下面是关于C语言多进程多线程的一些常见面试题及其回答: 1. 多进程多线程的区别是什么? 多进程是指在一个程序中同时运行多个进程,每个进程都有自己独立的内存空间和系统资源,进程之间通信需要使用进程间通信机制。而多线程是指在一个进程中创建多个线程,这些线程共享同一进程的内存空间和系统资源,线程之间通信更加简单,可以直接访问共享变量。 2. 如何在C语言中创建新的进程? 在C语言中,可以使用fork()函数创建新的进程。fork()函数会复制当前进程的所有资源和代码,得到一个新的进程,新的进程会从fork()函数的调用点开始执行。 3. 如何在C语言中创建新的线程? 在C语言中,可以使用pthread_create()函数创建新的线程。pthread_create()函数会在调用点创建一个新的线程,并指定线程的执行函数,新的线程会从执行函数的起始点开始执行。 4. 进程间通信的方式有哪些? 进程间通信方式有管道、命名管道、信号量、共享内存、消息队列等。这些方式可以用于不同进程之间的数据交换和同步。 5. 线程同步的方式有哪些? 线程同步的方式有互斥锁、条件变量、读写锁、信号量等。这些方式可以用于不同线程之间的数据共享和访问控制,保证线程的安全性。 总结: C语言支持多进程多线程编程,多进程多线程的区别在于进程之间需要使用进程间通信机制进行通信,而线程之间可以直接访问共享变量。创建新的进程可以使用fork()函数,创建新的线程可以使用pthread_create()函数。进程间通信的方式有管道、命名管道、信号量、共享内存、消息队列等,线程同步的方式有互斥锁、条件变量、读写锁、信号量等。了解这些概念和方式对于C语言多进程多线程编程的理解和应用非常重要。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值