liunx C 通过内存共享实现定时的读取数据
我现在为了计算很多数据的平均值,我不打算通过(a1+a2+a3+a4+...+an)/2进行计算,而是每次输入一个数据就开始计算平均值avg,
例如:输入a1 ,得到avg1 =a1,
继续输入a2,得到avg2 = (avg1*1+a[2])/(1+1)
...
输入到ai,此时avgi = (avg[i-1]*(i-1)+a[i])/((i-1)+1)...
到读取到最后一个数的时候,avg[n] = (avg[n-1]*(n-1)+a[n])/((n-1)+1)
这样每次都只需要知道两个参数(前面数据的平均值和当前输入的数据),请问怎样通过共享内存计算得到呢? Liunx c 共享内存
[解决办法]
没有必要使用共享内存。采用两个线程足以解决问题。不过要注意互斥访问
[解决办法]
这么简单的事情不需要共享内存,针对楼主的方法,我认为可以优化算法:
定义一个total保存目前为止的所有数的总和,这样就不需要每次都执行乘法指令了,
获取数据的线程1和处理数据的线程2,就是一个典型的生产者消费者同步问题。
total = 0; n = 0; avg = 0;
input a1:
total += a1;
n++;
check n & total
avg = total / n;
input a2:
toal += a2;
n++;
check n & total
avg = total / n;
...
input an:
total += an;
n++;
check n & total
avg = total / n;