Ich benutze ZMQ 4.1.2 auf Ubuntu 10.04.5 LTS.Verhindern ZMQ C++ von rufenden Rand()
Ich habe ein C++ - Programm, das srand() mit einer festen Nummer, und dann ruft Rand() ~ 100k mal und existiert. Ich stellte fest, dass ich verschiedene Zufallszahlen erhielt, wenn ich das gleiche Programm zweimal wiederholte.
Wenn ich einen ZMQ-Sockel geöffnet habe, bevor ich meine 100k Draws starte, scheint es, als ob die ZMQ-Bibliothek rand() aufruft und meine Wiederholbarkeit durcheinander bringt.
this->context = new zmq::context_t(1);
this->socket = new zmq::socket_t(*this->context, ZMQ_PUB);
socket->connect("tcp://localhost:5556"); // offending line
Alles, was ich tun müssen, ruft socket- auslassen> connect() und meine Anrufe rand() verhalten sich deterministisch.
Ist dies ein Fehler (Feature) in ZMQ? Oder geschieht dies auch mit dem zugrunde liegenden TCP-Socket?
Dank. Ich kann meinen Code ändern, um dies zu tun, aber sollte die ZMQ-Bibliothek nicht auch rand_r verwenden? – portforwardpodcast
Jeder sollte rand_r verwenden. :) – selbie
Wirklich, niemand sollte 'rand' oder' rand_r' für irgendetwas verwenden, weil sie auf vielen Systemen schreckliche Vorurteile und/oder begrenzte Ausgabebereiche und trivial erschöpfbare Seed States aufweisen. Aber ja, wenn du einen verwenden musst, ist "rand_r" "sicherer". – ShadowRanger