设计问题:跨多线程进程运行序列号

时间:2011-09-29 04:09:51

标签: multithreading multiprocessing

我有3个多线程进程。 我想实现一个序列号生成器(每次调用它都会按顺序返回下一个数字)。 所有三个进程或其线程都可以请求生成下一个序列号。 我正在寻找一种非常低延迟的解决方案。

提前感谢您的想法。

很抱歉错过了这个。我的平台是: - - Linux平台 - C ++

3 个答案:

答案 0 :(得分:1)

由于您没有提供太多细节,只是一般性的想法:

你写道有3个进程运行多个线程...我假设它们运行在同一台机器上...另一个假设:你正在使用某些当前版本的Windows ...

实施共享内存(通过MemoryMappedFile或其native counterpart)并使用每个进程中的原子增量(InterlockedAdd64或其托管对方Interlocked.Add)来获取下一个数字...

编辑 - 在OP添加平台(Linux)之后:

您也可以使用与Linux上述相同的方法:

答案 1 :(得分:0)

共享内存区域存储序列中的最后一个数字。每个进程,当它需要序列中的新数字时,计算它,InterlockedCompareExchange()使用旧数字。如果ICE()成功,则使用该数字,如果不成功,则重复该例程,直到ICE()成功为止。

答案 2 :(得分:0)

如果你在JVM世界中寻找一个:

class Sequencer {
  private AtomicLong sequenceNumber = new AtomicLong(0);
  public long next() { return sequenceNumber.getAndIncrement(); }
}