首页 > 代码库 > 多线程编程笔记
多线程编程笔记
多线程的问题
在多线程应用中,子线程一定会修改某些公共资源(包括全局变量、磁盘文件等),这样很有可能会影响其它子线程。由于不同线程是并行执行的,有可能某个时刻某个线程对公共资源进行了部分修改,此时公共资源是无效的,CPU 切换到另一个线程执行并访问此公共资源,这样将有可能造成巨大灾难。
要解决此问题,就应该使需要相同公共资源的不同线程不能同时执行,所以多线程问题分析的基础是互斥。
线程同步和线程互斥
线程间的关系可以分为无关和相交两种。当多个线程无关的时候,其中某个线程的启动不会依赖于另一个线程,它们启动和完成的先后顺序也没有特别要求,所以不需要任何机制来控制和协调它们运行,这是最简单的情况;而相交线程之间则较为复杂,有可能某个线程的启动依赖于另一个线程的完成,也有可能某个线程的完成达成另一线程启动的条件,这时就需要一些机制来控制和协调它们运行。
根据线程执行的先后顺序要求的不同需要用到线程同步和线程互斥。如果某个线程需要用到另一线程的运行结果,那么此线程应该让其先启动并完成后才启动,这种情况下的两个线程执行的先后顺序是有严格要求的,乱序就会出问题,此时就应该使用线程同步;如果两个线程仅仅访问相同的公共资源,而不是一个线程的启动依赖于另一个线程的完成,这种情况下的两个线程执行的先后顺序没有严格要求,谁先谁后无所谓,此时就应该使用线程互斥。
线程同步是一种更为复杂的线程互斥(即: 线程执行的先后顺序有严格要求的互斥)。在考虑选择线程同步还是线程互斥的时候,思考一下线程执行的先后顺序是否有严格要求即可作出正确选择。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。