c vector assign()方法经常失败
发布时间:2020-12-16 07:10:32 所属栏目:百科 来源:网络整理
导读:我有一个浮点数向量,在运行时使用assign()方法调整大小并清空多次,但每次切换到较小的大小时,它都会失败,抛出异常向量下标超出范围. 声明: std::vectorfloat buffer;size_t size,c; 设置大小并删除旧内容: void SetBuffersize(size_t sz){ // Resize vecto
我有一个浮点数向量,在运行时使用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 在同时访问数据时必须小心.你需要的是一种原子性形式,看看信号量,锁等.如果你需要性能,你可以看看旋转锁. http://en.wikipedia.org/wiki/Spinlock (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |