我有一个小应用程序,我通过API使用一些库。这个库使用多线程,我无法弄清楚如何正确分配内存。
假设我有一个班级MyClass
。该类具有函数myFunction
和指针ptrToSomething
。在类的构造函数中,我动态创建一个对象(不是只读的)并将其分配给ptrToSomething
,然后我在myFunction
中使用它。并且这个类只有一个实例。
使用单线程可以正常工作。但是我使用的库可能会在不同的线程中调用myFunction
。这意味着每个线程ptrToSomething
必须是唯一的。哦,这个库使用boost::thread
。
所以,这就是我的工作:
ptrArray
的数组n
(用于n
个线程),并使用构造函数中的对象对其进行初始化。boost:mutex
内创建MyClass
。std::set<boost::thread::id> idSet
。现在在myFunction
我锁定互斥锁,找出当前线程的boost::this_thread::get_id()
ID,将其插入idSet
,找到std::set::find
和{{1}的索引将std::distance
分配给某个临时指针,解锁互斥锁并继续使用该函数。
此代码确实有效,但我觉得非常低效。
有更优化的方法吗?或者对当前的修改进行某种修改?
UPD。这样的事情。
ptrToSomething[idx]