您好我想维护一个创建的信号量列表及其允许的计数(没有允许访问该信号量的线程实例)值。我尝试使用stl中的地图
map<sem_t, int> sem_map;
以便键(sem_t)将计数作为地图中的值。
但是c ++不允许我使用sem_t作为键,因为它是(sem_t)一个联合类型。那么,我如何维护信号量列表呢?我的目标是每当我想锁定或解锁信号量时,我首先从我维护的列表中获取信号量的id,并使用它进行一些预处理。
答案 0 :(得分:2)
您可以使用sem_t的地址作为密钥:
map<sem_t*, int> sem_map;
然后,给定sem_t x,您可以使用:
访问地图中的int值sem_map.find(&x);
请注意,此解决方案仅在您不复制信号量时才有效。
编辑:你不能在地图中使用sem_t作为键的原因是std :: map要求键类型具有运算符&lt;定义(为了进行内部排序,std :: map是树结构)。但是,联盟没有运营商&lt;定义,所以编译器不会让你使用它。另一方面,可以在它们之间比较指针,因此编译器实际上允许您将它们用作std :: map中的键。