C++编程规范之12:懂得何时和如何进行并发性编程
2013-12-11 11:40
197 查看
摘要:
如果应用程序使用了多个线程或者进程,应该知道如何尽量减少共享对象,以及如何安全地共享必须共享的对象。
在多线程和并发编程中最重要的是要避免死锁、活锁和恶性的竞争条件。
在编写多线程程序时要注意做到以下几点:
1.参考目标平台的文档,了解该平台的同步化原语。
2.最好将平台的原语用自己设计的抽象包装起来。
3.确保正在使用的类型在多线程程序中是安全的。要做到保证非共享的对象独立和记载调用者在不同的线程中使用该类型的同一个对象需要做什么。
在自己编写的可用于多线程程序的类型时,必须完成两项任务。首先,必须保证不同线程能够不加锁地使用该类型的不同对象。其次,必须在文档中说明使用者在不同线程中使用该类型的同一个对象需要做什么,基本的设计问题是如何在类极其客户之间分配正确执行。主要的选择有以下几个方面:
1.外部加锁,调用者负责加锁。
2.内部加锁,每个对象将所有对自己的访问串行化,通常采用为每个公用成员函数加锁的方法来实现,这样调用者就可以不用串行化对象的使用了。
3.不加锁的设计,包括不变性。
如果应用程序使用了多个线程或者进程,应该知道如何尽量减少共享对象,以及如何安全地共享必须共享的对象。
在多线程和并发编程中最重要的是要避免死锁、活锁和恶性的竞争条件。
在编写多线程程序时要注意做到以下几点:
1.参考目标平台的文档,了解该平台的同步化原语。
2.最好将平台的原语用自己设计的抽象包装起来。
3.确保正在使用的类型在多线程程序中是安全的。要做到保证非共享的对象独立和记载调用者在不同的线程中使用该类型的同一个对象需要做什么。
在自己编写的可用于多线程程序的类型时,必须完成两项任务。首先,必须保证不同线程能够不加锁地使用该类型的不同对象。其次,必须在文档中说明使用者在不同线程中使用该类型的同一个对象需要做什么,基本的设计问题是如何在类极其客户之间分配正确执行。主要的选择有以下几个方面:
1.外部加锁,调用者负责加锁。
2.内部加锁,每个对象将所有对自己的访问串行化,通常采用为每个公用成员函数加锁的方法来实现,这样调用者就可以不用串行化对象的使用了。
3.不加锁的设计,包括不变性。
相关文章推荐
- C++编程规范之12:懂得何时和如何进行并发性编程
- 懂得何时和如何进行并发性编程
- 如何用TSS进行任务切换?我切换不成功:((内有汇编代码/as86)‹‹12
- ABBYY FineReader 12 如何进行PDF安全设置
- 神经网络(12)--具体实现:如何对back propagation的正确性进行验证
- BASH命令和SHELL脚本总结(12)如何对字段进行操作
- 问题12:如何利用oracle bbed 来模拟破坏数据块,并且用RMAN进行恢复?
- LoadRunner12使用教程(一)——如何进行参数化
- When and How to Micromanage 何时和如何进行微观管理 (作者: Joel Spolsky 2009-12-1 译者:狂刀)
- 使用AFN 进行多次循环网络请求,如何判断何时请求完成
- LoadRunner12使用教程(一)——如何进行参数化
- C++编程规范之7:编程中应该知道何时和如何考虑可伸缩性
- 网站如何进行SEO诊断优化
- 如何在Java中进行图片剪裁 疯狂JAVA
- C#如何进行多线程编程
- java和c++直接如何进行ipc通信的?
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何进行软件测试管理
- 如何在c#中进行db2数据表的导出
- 如何利用Plxmon工具进行在线烧录PCI卡的EEPROM