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

本文介绍了一种通过预先创建大量备用对象并结合随机算法选取实例的方法,来提高线程不安全类的并发性能。该方法利用空间换取时间,通过锁机制确保线程间的互斥访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 假设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();

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



  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值