摘要:
如果应用程序使用了多个线程或者进程,应该知道如何尽量减少共享对象,以及如何安全地共享必须共享的对象。
在多线程和并发编程中最重要的是要避免死锁、活锁和恶性的竞争条件。
在编写多线程程序时要注意做到以下几点:
1.参考目标平台的文档,了解该平台的同步化原语。
2.最好将平台的原语用自己设计的抽象包装起来。
3.确保正在使用的类型在多线程程序中是安全的。要做到保证非共享的对象独立和记载调用者在不同的线程中使用该类型的同一个对象需要做什么。
在自己编写的可用于多线程程序的类型时,必须完成两项任务。首先,必须保证不同线程能够不加锁地使用该类型的不同对象。其次,必须在文档中说明使用者在不同线程中使用该类型的同一个对象需要做什么,基本的设计问题是如何在类极其客户之间分配正确执行。主要的选择有以下几个方面:
1.外部加锁,调用者负责加锁。
2.内部加锁,每个对象将所有对自己的访问串行化,通常采用为每个公用成员函数加锁的方法来实现,这样调用者就可以不用串行化对象的使用了。
3.不加锁的设计,包括不变性。