多线程编程中怎样进行同步设计?
有两种可选方式:1,在每一处可能会并发访问排它资源的地方进行同步。
比如 f() {
ACE_Guard<ACE_Thread_Mutex> guard(lock);
// 访问排他资源
}
其中f目前并没有被并发访问。但是考虑将来的可能性,进行了同步控制。
特点:这样的设计比较安全。今后即使运行方式有改动仍然安全。
2,在每一处确定会并发访问排它资源的地方进行同步。
上例可以改为
f() {
// 访问排他资源
}
因为根据目前的线程执行次序,确定不会并发访问f。
特点:这样的设计性能比较好。因为减少了不必要的同步控制。但是给将来的维护带来麻烦,程序如果有改动就要考虑一遍这些留空的部分。
我的程序是按方式2写的,今天被这个问题害了一次,程序架构改了一下,发现有好多地方都需要增加同步,改起来工作量很大,而且很容易留下隐藏的问题。
现在感觉还是方式1比较好,因为正确和安全是第一位的。Make it right, then make it fast. 认同。先让程序正确的工作和运行是第一位的。同步消耗是可以根据策略和一些方法,进行优化和消除的。
页:
[1]