我通过“pthread.h”模拟了 C++ 中线程之间的竞争条件
运行它时,它在“随机”循环迭代中出错。
我可以将它用作随机数生成器吗?
为什么?
#include<cstdio>
#include<thread>
static int counter = 0;
void increase() {
register int i = counter;
i++;
counter = i;
}
void decrease() {
register int i = counter;
i--;
counter = i;
}
int main() {
std::thread *p1, *p2;
register int i = 0;
while (1) {
i++;
counter = 0;
p1 = new std::thread(increase);
p2 = new std::thread(decrease);
p1->join();
p2->join();
delete p1;
delete p2;
if (counter) {
std::fprintf(stderr, "Error at loop %d\n", i);
std::exit(1);
}
}
std::exit(0);
}
我可以将它用作随机数生成器吗?
你真的不应该将它用作随机数。
why?
你不应该这样做,因为竞争条件是未定义的行为。
这个“随机”数字没有很好的熵,因为它取决于时间。
有更好的方法来生成随机数#include <random>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)