雁过请留痕...
代码改变世界

线程同步——优势、劣势

2012-08-25 10:16  xiashengwang  阅读(810)  评论(0编辑  收藏  举报

一、线程同步好处:

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

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

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

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

2,它会损害性能。

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

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

三、线程同步建议:

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

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

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

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

四、类库和线程安全

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

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