声明:
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()方法经常失败所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)