深入理解计算机系统13,并发编程

一个并发程序是由在时间上重叠的一组逻辑流组成的
三种不同的构建并发程序的机制:进程、I/O多路复用和线程

进程是由内核自动调度的,而且因为它们有各自独立的虚拟地址空间,所以要实现共享数据,它们需要显示的IPC机制
事件驱动程序创建它们自己的并发逻辑流,这些逻辑流被模型化为状态机,用I/O多路复用来显示地调度这些流
因为程序运行在一个单一进程中,所以在流之间共享数据速度很快而且很容易
线程是这些方法的综合,同基于进程的流一样,线程是由内核自动调度的
线程运行在一个单一进程的上下文中,因此可以快速而方便地共享数据

无论哪种并发机制,同步对共享数据的并发访问都是一个困难的问题
提出对信号量的P和V操作就是为了帮助解决这个问题
信号量操作可以用来提供对共享数据的互斥访问,也对诸如生产者-消费者程序中共享缓冲区这样的资源访问进行调度

一个函数被称为线程安全的,当且仅当被多个并发线程反复地调用时,它会一直产生正确的结果
四类线程不安全函数:
1,不保护共享变量的函数
2,保持跨越多个调用的状态的函数
3,返回指向静态变量的指针的函数
4,调用线程不安全函数的函数

可重入函数:当它们被多个线程调用时,不会引用任何共享数据

竞争和死锁是并发程序中出现的另一些困难的问题
当程序员错误地假设逻辑流该如何调度时,就会发生竞争
当一个流等待一个永远不会发生的事件时,就会产生死锁

互斥锁加锁顺序规则:如果对于程序中每对互斥锁(s,t),每个既包含s也包含t的线程都按照相同的顺序同时对它们加锁,那么这个程序就是无死锁的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值