基于ACE框架---C++多线程开发总结1,涉及 互斥量、读写锁、条件锁、基于条件锁的线程流水控制

本文对ACE使用的介绍不多,因网上ACE的资料很多,故不进行介绍,而仅使用

当使用多线程进行开发工作的时候,必然会涉及到对公有数据的读写处理。

如果多个线程同时访问某个公有变量,若大部分对其写操作,仅少部分对其读操作,则最好使用互斥量对此变量进行保护;若大部分对其读操作,少部分对其写操作,则最好使用读写锁对此变量进行保护。

使用1个线程触发另外1个或者多个线程使用最广泛的是条件锁。即某些线程因当前条件不满足使用条件锁进行休眠,还有1个线程通过接收用户的操作给条件锁发送信号,使其他某个线程由休眠转为运行状态。

多线程死锁。有线程PA、PB,有互斥量LA、LB,线程PA开始运行时首先获取LA,线程PB开始运行时首先获取LB,然后线程PA需要获取LB,而线程PB需要获取LA,此情况下将会产生死锁。有线程PA,有互斥量LA,线程开始运行时首先获取了LA,后期因某些操作又需要获取获取LA,这种情况下基于操作系统的不同而得到的结果不同,如在windows操作系统下不会产生死锁,而在linux系统下则会产生死锁。读写锁相反。

如何在多线程开发中降低多线程并发运行的等待时间,提高线程的执行效率是1个很大的问题?在C++23种设计模式中好像未提到多线程的具体设计方法。

方法1:以空间换取时间,降低线程之间的关联性,使每个线程获取到锁的时间、占用锁的时间尽可能的短

ACE_Thread_Mutex mux;
std::string tmp;
list<std::string> obj;
{
ACE_Guard< ACE_Thread_Mutex> gdSync(mux);
tmp = g_data;
}

方法2:还没有想出来


多线程的流水线控制(基于条件锁):此例仅1个线程触发另外1个的线程代码核心触发部分,可对其进行优化

代码1:公共部分

ACE_Thread_Mutex m_cond_mux;
ACE_Condition<ACE_Thread_Mutex> m_cond(m_cond_mux);


代码2:等待部分

while(1)
{
if(!条件
)
{
m_cond_mux.acquire();


m_cond.wait();


m_cond_mux.release();
}
//事件处理
}


代码3:触发部分

m_cond_mux.acquire();
if(条件)
{
m_cond.signal();
}
m_cond_mux.release();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值