1.开篇

2017-04-19  本文已影响0人  炫迈哥

多线程的优势

带来的风险

竞态条件:当多个线程竞争访问同一个资源时,如果对访问顺序敏感,就称存在竞态条件。
最常见的静态条件:

线程先从主存拷贝数据到本地内存,读写都在本地内存中进行,在某个时刻(线程退出或者什么)将变化的值写回主存。

1.死锁。多条线程相互等待对方释放锁,形成死锁。产生的四个必要条件:1)互斥,锁只能由一条线程持有,2)不可抢占,一条线程持有时,另外的线程不能强制剥夺 3)请求另外的锁时依然保持已经持有的锁(哲学家就餐问题,拿不到其他的锁,就一起释放现有的所有锁,就是避免产生这个条件的) 4)循环等待,形成环状等待锁的链路。(详细内容后续会有)
2.活锁,任务没有被阻塞,由于不满足某个条件一直重试,失败,重试,失败。(有可能自行解开的)
3.饥饿,由于线程优先级关系或者一些其他不公平的竞争条件,导致一些低优先级的线程永远也无法被执行。

  1. 上下文切换代价大,cpu消耗在线程调度上(”保存线程A的执行现场“然后”载入线程B的执行现场”)
  2. 锁粒度太大导致并发性能降低无限接近于单线程。
  3. 会抑制一些编一起的优化操作,如指令重排序等,同步共享主存,所有读写都会作用在主存上,增加了共享内存主线上的流量。
上一篇下一篇

猜你喜欢

热点阅读