C++中高并发使用线程不安全类库的一种方法

来源:互联网 发布:无限法则 知乎 编辑:程序博客网 时间:2024/06/11 01:49

 假设xxx类不是线程安全的类,不能够同时被多个线程使用,那么可以参考下面的方法来提高并发其性。假设线程池的容量是EPF_POOL_SIZE,则可以先创建EPF_POOL_SIZE*2个xxx类,如下,

   int limit = 2*EPF_POOL_SIZE;   vector<shared_ptr<xxx> > sc_arr;   for (int i = 0; i < limit; i++) {       shared_ptr<Safe_Cropping> sc(new xxx());       sc_arr.push_back(sc);   }
在使用xxx类的时候可参照如下方法,

  //Generate the random number  boost::mt19937 rng(time(0));  boost::uniform_int<> ui(0, limit - 1);  ...  ...  int index = ui(rng);  shared_ptr<xxx> irc = sc_arr->at(index)->ipc_roi_crop;  sc_arr->at(index)->mut.lock();  irc->doing();  sc_arr->at(index)->mut.unlock();

上述方法的本质思想是采用空间换时间的思路,预先创建大量的备用对象,在需要的时基于随机算法获取实例,并使用锁来确保互斥访问,从而使线程不安全的类能以大并发的方式运行。