N***m 发帖数: 4460 | 1 因为我发现对于奇数p,(2x+1)%p for x=0,1,2,...,p-1是x的乱序。
我就想有没有更有效或者简洁的办法? |
|
x****u 发帖数: 44466 | 2 没人说任何情况加volatile保证对,但本程序加上了就是保证对。
因为这个线程必须是单一函数,不可能被优化成内联。func1里面就一条语句,所以不
用担心被编译器或者CPU乱序掉。
我从本楼的开始就强调锁和volatile是两回事,这个优化是否改变global的行为是半路
插过来的,不是我举的例子。要是什么全局变量都上atomic,还不如用java了。 |
|
M7 发帖数: 219 | 3 这里有两个shuffle方法。第一个通过排序(乱序),第二个是标准的Fisher-Yates
shuffle, which has linear performance.
public static IEnumerable Shuffle(this IEnumerable
collection)
{
Random random = new Random();
return collection.OrderBy(item => random.Next());
}
public static IEnumerable FastShuffle(this IEnumerable
collection)
{
T[] buffer = collection.ToArray();
Random random = new Random();
for (int i = 0;... 阅读全帖 |
|
a***n 发帖数: 538 | 4 显然是多线程和coroutine简单,async的程序调试起来太费脑力了。
不用锁的多线程确实很难,特别是乱序执行,不过一般情况也没有必要。 |
|
d***a 发帖数: 13752 | 5 这个要大sb来做什么...
对一个4GHz的处理器来说,1ns是4个时钟周期
1us是4000个时钟周期,0.2us是800个时钟周期
假设处理器是八发射乱序执行,能达到2.0的IPC
这个时间,CPU可以执行1600条指令 |
|