- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用两种方法实现了一个并发队列:add(入队)和remove(出队)。
为了使用 2 个线程测试我的实现,我在名为 getRandom() 的方法中生成了 10 (NUMBER_OF_OPERATIONS) 个介于 0 和 1 之间的随机数。这允许我创建不同的添加和删除操作分布。
doWork 方法按线程数拆分完成的工作。
问题: 我从主函数传入的 threadID 与 doWork 方法接收到的 threadID 不匹配。以下是一些示例运行:
#define NUMBER_OF_THREADS 2
#define NUMBER_OF_OPERATIONS 10
int main () {
BoundedQueue<int> bQ;
std::vector<double> temp = getRandom();
double* randomNumbers = &temp[0];
std::thread myThreads[NUMBER_OF_THREADS];
for(int i = 0; i < NUMBER_OF_THREADS; i++) {
cout << "Thread " << i << " created.\n";
myThreads[i] = std::thread ( [&] { bQ.doWork(randomNumbers, i); });
}
cout << "Main Thread\n";
for(int i = 0; i < NUMBER_OF_THREADS; i++) {
if(myThreads[i].joinable()) myThreads[i].join();
}
return 0;
}
template <class T> void BoundedQueue<T>::doWork (double randomNumbers[], int threadID) {
cout << "Thread ID is " << threadID << "\n";
srand(time(NULL));
int split = NUMBER_OF_OPERATIONS / NUMBER_OF_THREADS;
for (int i = threadID * split; i < (threadID * split) + split; i++) {
if(randomNumbers[i] <= 0.5) {
int numToAdd = rand() % 10 + 1;
add(numToAdd);
}
else {
int numRemoved = remove();
}
}
}
最佳答案
在这一行中,您通过引用捕获 i
:
myThreads[i] = std::thread ( [&] { bQ.doWork(randomNumbers, i); });
这意味着当另一个线程运行 lambda 时,它会得到 i 的最新值,而不是它创建时的值。改为按值捕获它:
myThreads[i] = std::thread ( [&, i] { bQ.doWork(randomNumbers, i); });
更糟糕的是,由于您对 i
进行了无序读写,您当前的代码具有未定义的行为。事实上 i 可能在其他线程读取它之前已经超出了主线程的范围。上述修复修复了所有这些问题。
关于C++ : Passing threadID to function anomaly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42674502/
这个问题在这里已经有了答案: What does 'u' mean in a list? (4 个答案) 关闭 9 年前。 我对以下内容感到困惑: >>> >>> a 'abc' >>> z u'x
我一直在用 C 语言编写一个程序,它使用一系列线程来表示过桥的汽车,我正在做的函数正确地知道是在某个时刻打印桥的“状态”的函数,所以它显示了汽车(线程)在桥中的位置以及位置。问题是这样的;当只有一根线
伙计们, 我在 Java 动态类加载方面遇到了一个稍微不同的问题。我必须将一个对象(假设是 A 类的对象 A1)传递给 B 类的另一个对象 B1 的构造函数,以便 A1 的详细信息存储在 B1 中。
如果我比较两个浮点数,是否存在a>=b不等于b到= b始终与b = b等效于!(a < b),除非a或b之一或两者均为NaN。 a == b始终与b == a等效。* a == b等效于!(a !=
import matplotlib.pyplot as plt import numpy as np def arc(): x = np.arange((-np.pi)/4, (np.pi)/
我目前正在撰写有关 ARM 优化的讲座,特别是将 NEON 等 vector 机作为最终目标。 由于 vector 机不能很好地处理 if-else 激流回旋,我正在尝试演示如何通过位破解来摆脱它们。
我用两种方法实现了一个并发队列:add(入队)和remove(出队)。 为了使用 2 个线程测试我的实现,我在名为 getRandom() 的方法中生成了 10 (NUMBER_OF_O
我将 Eclipse 与 PMD 插件 (4.0.0.v20130510-1000) 一起使用,遇到了很多违规问题并解决了其中的大部分问题,但我不明白为什么 DD 异常 出现在下面的代码中 priva
我正在阅读 R 编程入门,并注意到一个轻微的异常: x <- c(2,1,1,5)产生 num 类型的向量 y <- c(1:5)产生 int 类型的向量 z <- c(1.5,2.3)产生 num
我是 RxSwift 的新手,今天我遇到了一个我无法解决的问题。我想观察 UITextField 中的 controlEvent。 代码: textField.rx .controlEvent
我有一个页面,其中包含多个下拉列表,所有列表都带有复选框(可以进行多个选择)。内部文档准备好了,我有这个简单的代码: $(":checkbox").click(alert('TEST')); 问题是,
我遇到了一些奇怪的事情。 (至少对我而言)并且不确定更正此问题的最佳途径是什么,因为在这种情况下 id 喜欢使用小部件,并且在没有数据时不会实际呈现我的标记 0"> greater
有时当我关闭我的 JavaFX 应用程序时,我会在我的控制台上收到这些错误: [0x7FEF231B2F8] ANOMALY: meaningless REX prefix used [0x7FEF2
我已经从 sklearn-framework 中为文本分类实现了 LinearSVC 和 SVC。我正在使用 TfidfVectorizer 来获取由两个不同类(良性数据和恶意数据)组成的输入数据的稀
I have a Python script that reads a dataset, performs anomaly detection for various anomaly types
我从 http://nlp.stanford.edu/data/glove.twitter.27B.zip 下载了 Glove-twitter 预训练向量 当我在内存中加载向量(使用 glove.tw
我有以下安卓代码: public final List getList() { Cursor cursor = null; try { final String qu
xarray 的 documentation解释了如何计算月度气候学的异常。在这里,我试图做一些稍微不同的事情:我想根据每日时间序列计算本月平均值的每日异常值(而不是来自月度气候学)。 我设法使用 g
对 UIKit PushViewController 的调用会导致最终的堆栈溢出(或其他异常)吗?我的应用程序现在使用 pushViewController:animated: 跨屏幕导航,例如: [
我有一个场景,我有几千个数据实例。数据本身表示为单个整数值。我希望能够检测到一个实例何时是极端离群值。。例如,使用以下示例数据:。D显然是一个反常现象,我想在此基础上执行特定的操作。。我想试着利用我对
我是一名优秀的程序员,十分优秀!