c++ - 防止 ZMQ c++ 调用 rand()

标签 c++ sockets random zeromq

我在 Ubuntu 10.04.5 LTS 上使用 ZMQ 4.1.2。

我有一个 c++ 程序,它使用固定数字为 srand() 播种,然后调用 rand() ~100k 次并存在。我发现在重新运行同一个程序两次时得到了不同的随机数。

如果我在开始 100k 绘制之前打开了一个 ZMQ 套接字,那么 ZMQ 库本身似乎正在调用 rand() 并扰乱了我的可重复性。

this->context = new zmq::context_t(1);
this->socket = new zmq::socket_t(*this->context, ZMQ_PUB);
socket->connect("tcp://localhost:5556"); // offending line

我需要做的就是省略对 socket->connect() 的调用,并且我对 rand() 的调用具有确定性。

这是 ZMQ 中的错误(功能)吗?或者底层的 TCP 套接字也会发生这种情况吗?

最佳答案

您希望使用 rand_r 而不是 rand,这样您的用法就不会与其他使用 rand 的库发生冲突。 例如

unsigned int seed = YOUR_INITIAL_SEED;

for (int x = 0; x < 100000; x++)
{
    unsigned int r = rand_r(&seed);
    DoMyThing(r);
}

https://linux.die.net/man/3/rand

关于c++ - 防止 ZMQ c++ 调用 rand(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353349/

相关文章:

c++ - XML DOM 对象如何从磁盘加载到内存中

ServerSocket.accept() 中的 java.lang.nullpointerException

python - 采样 Pandas Dataframe 的最快方法?

python - 我是在随机生成器中偶然发现了某种模式,还是得到了极其罕见的东西?

c++ - 使用模板链接错误

c++ - 创建无边界的 DirectShow 窗口

c++ - 如何修复 const char 与 char DirectX11 类型不兼容

python - 无法接收消息 - Python 套接字

arrays - C# : UDP Socket - Receive data with unknown size

c# - 在 Parallel.For 中使用 Random