在 C++11 中计算字母和单词的双字母组合的 std::线程向量的问题
Problems with a vector of std::threads in C++11 counting bigrams of letters and words
我正在尝试实现一个并发程序来计算文本文件中单词和字母的双组合词的出现次数。核心是计算双字母的两个函数。在main
中,我使用两个函数之一启动线程。有一个主for
可以启动线程并将它们推入vector
。
std::vector<std::thread *> threads;
std::pair<std::string, int> current_job;
for (unsigned int i = 0; i < num_threads; i++) {
current_job = filenames.front();// ex. <baskerville.txt, 1>
filenames.pop();
if (current_job.second == 0) {
threads.push_back(new std::thread(sentence_bigrams_letters, std::cref(current_job.first), std::ref(v),
std::ref(lock_chars)));
} else if (current_job.second == 1) {
threads.push_back(
new std::thread(sentence_bigrams, std::cref(current_job.first), std::ref(m), std::ref(lock_words)));
}
}
for (unsigned int k = 0; k < threads.size(); k++) {
threads.at(k)->join();
delete (threads.at(k));
}
有两个文本文件称为baskerville.txt和dorian.txt因此filenames
总共有4个元素。程序运行,但打印线程的输出没有意义。每个线程打印特定二进制的计数,其中包含二进制组合本身,他正在读取的文件名称和他的ID。这是输出:
199 y,t .Textdorian.txt 4 /letters
398 y,t .Textdorian.txt 2 /letters
33 a, few .Textdorian.txt 3 /words
66 a, few .Textdorian.txt 5 /words
这对我来说没有任何意义,所以如果有人对正在发生的事情有所了解,那将非常有帮助。
我解决了这个问题。问题是我正在传递字符串 current_job.first 作为引用,并且在 for 循环迭代中更改了引用。所以代替:
threads.push_back(new std::thread(sentence_bigrams_letters, std::cref(current_job.first), std::ref(v),
std::ref(lock_chars)));
是的:
threads.push_back(new std::thread(sentence_bigrams_letters, current_job.first, std::ref(v),
std::ref(lock_chars)));
现在它可以工作
相关文章:
- 输入std::数组时出现问题
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- GCC 问题与 static_cast<std::u16string>
- C++ std::function 对于类 exept 的所有实例都是空的(只有 Visual2019 编译器问题)
- 在 std::tuple 上使用 std::variant 的问题
- std::max() 函数与定点实现的比较中的问题
- 使用 CImg 库的 std::min 和 std::max 的编译问题
- 如何在 cpp 中使用 std::enable_if 从模板中处理此类问题
- 关于 std::bitset 构造函数的几个问题?
- 'std::filesystem::d irectory_iterator' 编译器问题
- C++ 中 std::vector 的内存问题
- 我有一个关于C++提升的问题:: asio 和 std :: 异步
- std::p 设置或多组的修订问题
- 没有'str'成员在 GCC 和 Clang 'std::basic_ostream<char>',但 MSVC 没有问题
- 问题 (std::bad_alloc) 通过 QThread 中的 QSqlQuery 将大图像(约 36 MB)保存到
- 对齐C++字符串类型问题 std::字符串到 TStr
- 此C 异常语法有什么问题(std :: runtime_error)
- 设计问题:std::map的线程安全性
- 矢量问题 (std::out_of_range)