Windows线程同步-以原子方式操作一组对象使用一个锁


在《Windows核心编程》一书中,在《用户模式下的线程同步》一章,给出了一些有用的窍门和技巧。其中一点就是:
以原子方式操作一组对象时使用一个锁。
一种常见的情况是多个对象聚在一起回构成一个单独的“逻辑资源”。无论我们队这个逻辑资源进行读操作或者是写操作,都应该只使用一个锁。
应用程序中的每个逻辑资源都应该有自己的锁,用来对逻辑资源的部分和整体的访问进行同步。我们不应该为所有的逻辑资源都创建单独的锁,这是因为如果多个线程访问的是不同的逻辑资源,那么这样做会降低可伸缩性:任一时刻系统只允许一个线程执行。

我的问题是,为什么我们不应该为所有的逻辑资源都创建单独的锁?前面不是说每个逻辑资源都应该有自己的锁么?为什么这样会导致任一时刻只允许一个线程执行?

内核 C++

飞花携满袖 13 years ago

你所引用文字的意思是:我们不应该为所有的“对象”都创建单独的锁,但“每个逻辑资源都应该有自己的锁”。而一个逻辑资源是一组相关的对象。

当“多个线程访问的是不同的逻辑资源”的时候,“我们不应该为所有的逻辑资源都创建单独的锁”……否则,“会降低可伸缩性”

如果各个线程访问的逻辑资源(即使它们是不同的逻辑资源)被同一个锁锁住,那就同一时刻只有一个线程被允许执行了

卖红帽的火柴 answered 13 years ago

Your Answer