在c#中,如何独立地保证两台机器不会产生相同的随机数?

在c#中,如何独立地保证两台机器不会产生相同的随机数?,c#,random,numbers,C#,Random,Numbers,假设两台机器运行相同的代码,但是您希望偏移正在运行的代码的时间,这样它们就不可能不同时运行,同时运行的意思是彼此之间不在5秒内运行 可以在开始运行代码之前生成随机的秒数,但这可能会生成相同的秒数 是否有一种算法可以独立保证不同的随机数?为了保证应用程序不会同时运行,您需要在两者之间进行某种通信。这可能很简单,只要有人将配置值设置为在特定时间运行(或者延迟设置的秒数,如果您可以保证它们将同时启动)。或者,它可能需要调用数据库(或类似数据库)来确定何时启动。为了保证应用程序不会同时运行,您需要在两者

假设两台机器运行相同的代码,但是您希望偏移正在运行的代码的时间,这样它们就不可能不同时运行,同时运行的意思是彼此之间不在5秒内运行

可以在开始运行代码之前生成随机的秒数,但这可能会生成相同的秒数


是否有一种算法可以独立保证不同的随机数?

为了保证应用程序不会同时运行,您需要在两者之间进行某种通信。这可能很简单,只要有人将配置值设置为在特定时间运行(或者延迟设置的秒数,如果您可以保证它们将同时启动)。或者,它可能需要调用数据库(或类似数据库)来确定何时启动。

为了保证应用程序不会同时运行,您需要在两者之间进行某种通信。这可能很简单,只要有人将配置值设置为在特定时间运行(或者延迟设置的秒数,如果您可以保证它们将同时启动)。或者,它可能需要调用数据库(或类似数据库)来确定何时启动。

听起来像是在寻找一个调度程序。您需要第三个服务(调度器),它负责维护应用程序应该/允许启动的时间。我会避免让应用程序直接相互对话,因为随着您的需求变得更加复杂,这将成为一场噩梦(添加第三台计算机,另一个程序必须遵循类似的调度规则,等等)

让程序向调度服务发送一些唯一的信息(机器的MAC地址,一个只生成一次并存储在配置文件中的GUID,等等),并让它响应程序必须等待多少秒才能开始其主执行循环。或者更好的是,在两台机器上都授予调度器在指定时间运行程序的权限


但是,您不能完全孤立地执行此操作—假设您有一个程序唯一地决定等待5秒,另一个等待7秒—但是,当程序2的计数器在程序1之前2秒启动时会发生什么情况?调度程序可以为您解决这一问题。

听起来您正在寻找调度程序。您需要第三个服务(调度器),它负责维护应用程序应该/允许启动的时间。我会避免让应用程序直接相互对话,因为随着您的需求变得更加复杂,这将成为一场噩梦(添加第三台计算机,另一个程序必须遵循类似的调度规则,等等)

让程序向调度服务发送一些唯一的信息(机器的MAC地址,一个只生成一次并存储在配置文件中的GUID,等等),并让它响应程序必须等待多少秒才能开始其主执行循环。或者更好的是,在两台机器上都授予调度器在指定时间运行程序的权限


但是,您不能完全孤立地执行此操作—假设您有一个程序唯一地决定等待5秒,另一个等待7秒—但是,当程序2的计数器在程序1之前2秒启动时会发生什么情况?调度器可以为您解决这一问题。

正如注释/其他答案中指出的那样,当独立并行运行时,true random不能真正保证落入特定范围

假设您的目标是不同时运行多个进程,您可以强制每台机器选择不同的时间段来运行该进程

若你们能在当前时间和机器的“索引”上在这台机器之间取得一致意见,那个么你们就可以在选定的时隙上运行你们的程序,并且时隙中可能存在随机偏移

也就是说,使用时间服务来同步时间(对于连接到几乎任何网络的机器,大多数操作系统的默认行为)并将顺序ID预先分配给机器(并且有关于总计数的信息)。而不是让ID为的机器在时隙中运行(假设计数<60,否则根据计数调整启动时间;提供足够的时间,以避免在时间同步间隔之间发生小时间漂移时出现重叠)


这样,机器之间就不需要通信。

正如注释/其他答案中所指出的那样,当独立并行运行时,true random不能真正保证落入特定范围

假设您的目标是不同时运行多个进程,您可以强制每台机器选择不同的时间段来运行该进程

若你们能在当前时间和机器的“索引”上在这台机器之间取得一致意见,那个么你们就可以在选定的时隙上运行你们的程序,并且时隙中可能存在随机偏移

也就是说,使用时间服务来同步时间(对于连接到几乎任何网络的机器,大多数操作系统的默认行为)并将顺序ID预先分配给机器(并且有关于总计数的信息)。而不是让ID为的机器在时隙中运行(假设计数<60,否则根据计数调整启动时间;提供足够的时间,以避免在时间同步间隔之间发生小时间漂移时出现重叠)


这样,机器之间就不需要通信。

让两个应用程序都读取本地配置文件,等待指定的秒数,然后开始运行


一个放0,另一个放6+。它们不会在5秒内启动。(根据需要调整6+,以适应机器负载、速度等的变化。)

让两个应用程序读取本地配置文件,等待指定的秒数,然后开始运行

一个放0,另一个放6+。它们不会在5秒内启动。(调整
(start of an hour + (ID*minutes) + random_offset (0,30 seconds))