BCB线程的互斥与同步

互斥控制是为了避免一个线程在使用某一个对象或全局变量与其他线程发生冲突。实现线程互斥的方法有:
(1)   访问代码委托给VCL主线程执行。在线程中若要调用可视化的方法或访问其属性,可将执行代码委托给VCL主线程执行,否则会发生并发访问冲突。委托的方法是先将使用可视化组件的代码单独编成一个函数,函数原型是void 函数名(void),然后电泳TThread类的成员函数Synchronize(函数名)来调用它,VCL主线程顺序执行所有组建对该组建的访问(包括响应人机界面事件、windows系统事件等),从而不会发生冲突。
(2)   使用对象锁。有些VCL类提供对象锁,可以使用对象的LOCKUNLOCK方法进行加锁与解锁。当访问这些对象时,可调用LOCK方法锁住对象,然后访问该对象,访问完毕后调用对象的UNLOCK方法释放该对象。
(3)   使用临界区对象。若要访问一个全局变量,则可设置一个临界区对象(TCritical Section)来实现互斥,该对象有AcquireRelease两个方法。Acquire方法阻塞其他线程,执行临界区代码,而Release方法释放等待进入临界区的线程。例如:设Q为全局变量,Crit1为临界区对象,在访问Q进入临界区时须执行Crit1.Acquire(),访问后退出临界区时须执行Crit1.Release()。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值