0
私はUbuntu 10.04.5 LTSでZMQ 4.1.2を使用しています。ZMQ C++がrand()を呼び出さないようにする
私は、srand()を固定数でシードし、次にrand()〜100k回呼び出して存在するC++プログラムを持っています。私は、同じプログラムを2度再実行すると、違う乱数を得ていることが分かりました。
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->(接続)とランド(への私の呼び出し)決定論的に振る舞う呼び出し省略です。
これはZMQのバグ(機能)ですか?または、これは基礎となるTCPソケットでも起こりますか?
感謝。これを行うために私のコードを変更することはできますが、ZMQライブラリもrand_rを使用すべきではありませんか? – portforwardpodcast
誰もがrand_rを使用する必要があります。 :) – selbie
多くのシステムではひどいバイアスや制限された出力範囲と徹底的に枯渇しやすいシード状態を表示するため、本当に誰も 'rand'や' rand_r'を何に使うべきではありません。しかし、ええ、あなたが1つを使用しなければならない場合、 'rand_r'はより安全です。 – ShadowRanger