大佬教程收集整理的这篇文章主要介绍了c vector assign()方法经常失败,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
声明:
std::vector<float> buffer; size_t size,c;
void SetBuffersize(size_t sz) { // Resize vector // buffer.resize(sz); // really not needed? // delete old content buffer.assign(sz,0); }
有一个线程在运行,不断访问这个向量:
void Process() { if (++c >= sizE) c = 0; float out = buffer[c]; // do something with out; }
另一个线程可以调整缓冲区的大小:
void ChangeStatus(int n) { size = size_table[n]; SetBuffersize(sizE); }
我通过添加一个标志来解决,该标志在调整矢量大小时阻止了Process()函数.有没有更好的解决方案来避免实时线程中额外if语句的开销?
>假设size = 10且c = 5
> Process将条件评估为false
> ChangeStatus清除向量
>进程尝试在size = 0的向量上获取缓冲区[c]
在同时访问数据时必须小心.你需要的是一种原子性形式,看看信号量,锁等.如果你需要性能,你可以看看旋转锁. http://en.wikipedia.org/wiki/Spinlock
以上是大佬教程为你收集整理的c vector assign()方法经常失败全部内容,希望文章能够帮你解决c vector assign()方法经常失败所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。