c++ - 使用 pthread_t 作为映射中的键

标签 c++ linux multithreading pthreads posix

我想在映射中存储我自己的一个类,键是 pthread_t 类型。(我类的每个对象都包含一个 pthread_t 数据成员,所以我希望每个实例都与该 pthread_t 作为键相关联, 在 map 中) 问题是 pthread_t 无法比较,只能与 pthread_equal 进行比较,所以我不能将它作为键放在映射中。

我看过unordered_map,但是我怎样才能为pthread_t实现一个hash函数呢?

直到现在我都考虑过使用 pthread_self() 来比较它们,但这也是不可能的,因为返回值是 pthread_t,而且我不想使用这只是 unsigned long int 的 typedef 这一事实。

如果无法使用某种映射,我如何将 pthread_t 的对象存储在容器中并使用 pthread_self() 函数快速找到它们?

最佳答案

它应该这样工作:

bool myCmp(const pthread_t &a, const pthread_t &b)
{
  return memcmp(&a, &b, sizeof(pthread_t)) < 0;
}

map<pthread_t, myDataType, myCmp> myMap;

关于c++ - 使用 pthread_t 作为映射中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530124/

相关文章:

c++ - 在 lambda 表达式中调用方法

node.js - 如果网络连接断开,请重新启动 systemd 服务

linux - 无法写入已安装(外部)HDD

java - Java中的锁对象需要是静态的吗?

c++ - 使用 time.h 时出现段错误

c++ - 尝试创建线程的问题

c++ - 定义数组时是否可以接受const_cast?

php - 在 Linux 系统上包含相对路径的文件问题

c# - 这段代码实际上是线程安全的吗?

c# - 具有监视器进入/退出、等待/脉冲、锁定的多线程