我希望获取与已知固定整数关联的线程id,而不是获取任意id值。
#include <iostream>
#include <thread>
#include <mutex>
#include <map>
#include <vector>
using namespace std;
std::mutex mu;
std::map<std::thread::id, int> threadIDs;
void run(int i) {
std::unique_lock<mutex> map_locker(mu);
std::cout << "Thread " << threadIDs.insert(std::make_pair(std::this_thread::get_id(), i)) << endl;
map_locker.unlock();
}
int main() {
std::thread the_threads[3]; //array of threads
for (int i = 0; i < 3; i++) {
//launching the threads
the_threads[i] = std::thread(run, i);
}
for (int i = 0; i < 3; i++) {
the_threads[i].join();
}
}
例如:
Thread ID Integer value
4 0
2 1
5 2
我在运行上述代码时出错:
测验cpp:14:28:错误:二进制表达式('basic_ostream'的操作数无效
std::pair
无法通过ostream
打印(请查看此处允许的类型),因此您需要单独打印其成员:
lock_guard<mutex> map_locker(mu);
pair<thread::id, int> p = make_pair(this_thread::get_id(), i);
threadIDs.insert(p);
cout << "Thread (" << p.first << ", " << p.second << ")" << endl;
请注意,正如@FrançoisAndrieux所指出的,您不需要手动解锁unique_lock,因为当它被销毁(超出范围)时,它会自动解锁。
正如@JesperJuhl所说,在这种情况下,lock_guard
是更好的实践(它提供了您正在寻找的最小功能)。
问题内容: 我正在学习elasticsearch。我已经在’mapping.json’中指定了映射。其内容是 当前的映射是 我使用以下命令为书籍创建映射 但是当列出所有映射时,我得到: 为什么不按Mapping.json文件中指定的方式创建书籍的映射? 问题答案: 请尝试一下
预期的输出是值的排序数组:。
假设我有一组字符串和一个散列函数(或任何单边函数)和一个测试函数。我想用Java8流创建一个从输入字符串到通过测试函数的哈希值的映射。我的问题是如何在中编写? 看来老的for循环是最简洁的解决方案。
<thread>头文件提供了管理和辨别线程的工具,并且提供函数,可让当前线程休眠。 头文件内容 namespace std { class thread; namespace this_thread { thread::id get_id() noexcept; void yield() noexcept; template<typename Rep,ty
我可以创建std::数组: 它很好用。但我无法创建向量: 这给了我一个错误:
如果我要创建一个数组,并用值初始化它,我会这样做 我想对ArrayList做同样的事情,并有类似的东西 上面这行代码不行,我理解。我试图传达我希望实现的目标。有没有办法在Java做到这一点,而不必做像 或者