在c#中,如何独立地保证两台机器不会产生相同的随机数?
假设两台机器运行相同的代码,但是您希望偏移正在运行的代码的时间,这样它们就不可能不同时运行,同时运行的意思是彼此之间不在5秒内运行 可以在开始运行代码之前生成随机的秒数,但这可能会生成相同的秒数在c#中,如何独立地保证两台机器不会产生相同的随机数?,c#,random,numbers,C#,Random,Numbers,假设两台机器运行相同的代码,但是您希望偏移正在运行的代码的时间,这样它们就不可能不同时运行,同时运行的意思是彼此之间不在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))