zoukankan      html  css  js  c++  java
  • 线程同步——优势、劣势

    一、线程同步好处:

    多个线程同时访问共享数据时,防止数据被损坏。

    二、线程同步带来的问题:

    1,实现比较繁琐,而且容易出错。

    必须对多个线程可能同时访问的所有数据,用额外的代码包围起来,以获得和释放一个同步锁。这需要由程序员来保证没有遗漏,对多线程共享的数据的加锁工作。并且,在程序完成时,需要进行压力测试以保证多个线程并发时,结果如预期。

    2,它会损害性能。

    获取和释放一个锁是需要时间的。因为需要额外的调用一些方法,并且需要协调调度下一个获得锁的线程。

    3,每次只能允许一个线程访问资源。这是锁的全部意义所在,但也是问题所在,因为阻塞一个线程可能会造成更多的线程被创建。

    三、线程同步建议:

    1,线程同步并不是一件好事,设计自己的应用程序是应酌情考虑,尽量避免线程同步。

    2,避免使用一些共享数据,如静态字段。(如果有多线程同时读写这个静态字段就有问题)

    3,试着用值类型,因为值类型总是会被复制,每个线程操作的都是自己的那个副本。

    4,多线程对共享数据进行只读访问是没有任何问题的。

    四、类库和线程安全

    Microsoft的FCL保证所有的静态方法都是线程安全的。这意味着如果有两个线程同时调用静态方法,不会有数据被破坏。FCL必须做到这一点,因为使用FCL的公司不可能和Microsoft去协商使用怎样的一个锁来实现线程同步。只要FCL保证了自己是线程安全的,我们就只用做好自己的线程同步就行了。

    但是,FCL不保证实例方法是线程安全的,如果每个实例方法都去加一个锁,将会带来巨大的性能问题。

  • 相关阅读:
    Centos配置Apache phpadmin环境
    Linux添加FTP用户并设置权限
    Java中的过滤器
    【eclipse】注释模版
    [ci db操作]
    给vmware的Linux虚拟机添加硬盘
    基于LVDS/M-LVDS的数据通信
    如何找回丢失的硬盘分区表?
    vc++怎么可以直接刷掉MBR?搞笑的吧
    EFI、UEFI、MBR、GPT的区别
  • 原文地址:https://www.cnblogs.com/xiashengwang/p/2655678.html
Copyright © 2011-2022 走看看