22、并行编程中的同步与通信技术

并行编程中的同步与通信技术

1. 同步操作

在并行编程中,同步操作至关重要。其中,互锁操作比加锁方法执行速度更快。在测试计算机上,互锁操作比加锁方法快约 20%。但要注意,互锁操作并非万能,必须正确使用,且在所有相关位置都要使用。若用互锁指令修改共享数据,却用普通读取方式读取该数据,代码将无法正常工作。例如,将 InterlockedReader 方法中的 value := TInterlocked.Read(FPValue^); 改为 value := FPValue^; ,重新运行测试会得到与原始完全不安全版本相同的错误结果。

2. 对象生命周期

在多线程环境中,对象的创建和销毁需要特别注意,并非所有方法都是安全的,一个小错误就可能导致偶尔崩溃。
- 简单加锁法 :对对象的所有访问进行加锁,在临界区创建、使用和销毁对象,虽然能保证正常工作,但速度慢且易出错,容易忘记加锁。
- 前后创建销毁法 :在后台任务创建前创建对象,在后台任务销毁后销毁对象。对于非 ARC 平台的普通对象,只是共享指针,不会有问题;对于实现接口的对象或在 ARC 平台编译时,引用计数机制会起作用,由于引用计数是线程安全的,也不会有问题。但要确保并行代码中调用的对象所有方法在多线程同时调用时能正常工作。

当并行任务已经在运行时,创建或销毁共享对象会出现问题。销毁对象时,在非 ARC 环境下,一个线程使用对象时另一个线程不能销毁它;在使用接口或 ARC 时,将共享接口赋值为 nil

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值