wishel 发表于 2008-9-11 17:25:01

多线程编程中怎样进行同步设计?

有两种可选方式:
1,在每一处可能会并发访问排它资源的地方进行同步。
比如 f() {
   ACE_Guard<ACE_Thread_Mutex> guard(lock);
   // 访问排他资源
}
其中f目前并没有被并发访问。但是考虑将来的可能性,进行了同步控制。
特点:这样的设计比较安全。今后即使运行方式有改动仍然安全。
2,在每一处确定会并发访问排它资源的地方进行同步。
上例可以改为
f() {
   // 访问排他资源
}
因为根据目前的线程执行次序,确定不会并发访问f。
特点:这样的设计性能比较好。因为减少了不必要的同步控制。但是给将来的维护带来麻烦,程序如果有改动就要考虑一遍这些留空的部分。

我的程序是按方式2写的,今天被这个问题害了一次,程序架构改了一下,发现有好多地方都需要增加同步,改起来工作量很大,而且很容易留下隐藏的问题。
现在感觉还是方式1比较好,因为正确和安全是第一位的。Make it right, then make it fast.

winston 发表于 2008-9-11 17:28:14

认同。先让程序正确的工作和运行是第一位的。同步消耗是可以根据策略和一些方法,进行优化和消除的。
页: [1]
查看完整版本: 多线程编程中怎样进行同步设计?