-1

我需要的是一个可以定义简单对象的系统(例如,一个“服务器”,可以有一个“操作系统”和“版本”字段,以及其他元数据(IP、MAC 地址等))。
我希望能够以安全的方式从系统请求对象,例如,如果我定义一个“服务器”,可以由 3 个客户端同时使用,那么如果 4 个客户端同时请求一个服务器时间,一个人将不得不等到服务器被释放。
此外,我需要能够以某种查询样式执行请求,例如allocate(type=System, os='Linux', version=2.6).

语言无关紧要,但 Python 是一个优势。

在过去的几天里,我一直在谷歌上搜索类似的东西,但一无所获,也许这种系统有一个更好的名字,我不知道。

有什么建议吗?

谢谢!

4

2 回答 2

0

并发应用程序中的资源限制(例如“最多 3 个客户端”示例)通常是通过使用信号量(或更准确地说,计数信号量)来实现的。

您通常使用一些“计数”来初始化信号量 - 这是对该资源的最大并发访问次数 - 每次客户端开始使用该资源时都会减少此计数器,并在客户端完成使用它时增加它。信号量的实现保证了“递增”和“递减”操作是原子的。

您可以在 Wikipedia 上阅读有关信号量的更多信息。我对 Python 不太熟悉,但我认为这两个链接可以提供帮助:

于 2010-01-10T11:45:21.153 回答
0

对于 Java,有一个非常好的标准库具有此功能:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

只需使用 Semaphore 字段创建一个类:

 class Server {
   private static final MAX_AVAILABLE = 100;
   private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);
   // ... put all other fields (OS, version) here...
   private Server () {}

   // add a factory method
   public static Server getServer() throws InterruptedException {
     available.acquire();
     //... do the rest here
   }

 }

编辑:

如果您希望事情更“可配置”,请考虑使用 AOP 技术,即创建基于信号量的同步方面。

编辑:

如果您想要完全独立的系统,我想您可以尝试使用任何支持行级锁定作为信号量的现代数据库(例如 PostgreSQL)系统。例如,为每个代表一个服务器创建 3 行,如果它们是空闲的(例如“ select * from server where is_used = 'N' for update”),则使用锁定选择它们,将所选服务器标记为已使用,最后取消标记,提交事务。

于 2010-01-12T10:23:01.993 回答