c++ - 我可以使用 Qt 线程 ID 为每个线程创建唯一的缓存吗?

标签 c++ multithreading qt

我想缓存非线程安全的延迟加载对象。每个线程都应该有它自己的对象组。

我的想法是创建QMap<int, MyObject>并通过我使用 QThread::currentThreadId() 获得的线程 ID 访问此映射。映射本身将受到读/写互斥体的保护(即,用于写入的唯一锁,用于读取的共享锁)。不会经常访问它。

我不确定这是否真的是个好主意。这种方法有什么问题吗?

最佳答案

来自官方文档( http://doc.qt.io/qt-4.8/qthread.html#currentThreadId )

Warning: The handle returned by this function is used for internal purposes and should not be used in any application code.

看起来这个函数并不打算用作公共(public)函数,因此在您的应用程序中以任何方式使用它可能都不是一个好主意

您是否考虑过使用 std::this_thread::get_id() 或使用 thread_local 静态对象?

关于c++ - 我可以使用 Qt 线程 ID 为每个线程创建唯一的缓存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45817860/

相关文章:

c++ - 使用刷新的输入从 C++ 调用 Matlab

python - Pyside 同时滚动两个 qtextedits

c++ - 没有 "if(...) return ...;"的 "else"是否被认为是好的风格?

qt - 第一次发射信号后自动断开

c++ - 如何找到从一个 vector 到另一个 vector 的正确旋转?

c# - 长时间处理后显示对话框

c - GTK 3 线程管理

java - 线程被多次调用

c++ - 什么时候使用互斥体?

c++ - 从 C++ 到 Haskell 类和状态