线程的互斥与同步

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

转载于:https://www.cnblogs.com/fx_guo/archive/2007/10/08/1935628.html

BCB线程的互斥与同步相关推荐

  1. 线程的互斥与同步机制

    同个人博客:http://tsundere-x.top/ 一.互斥 为何需要引入互斥机制? 当多个线程对同一数据并发读写(至少有一个线程执行写操作)时,这种情形被称为竞争.竞争会导致数据读或写的不确定 ...

  2. 南京邮电大学操作系统实验二:线程的互斥与同步

    实验原理及内容 基于互斥锁的临界区管理 使用编辑器gedit 2_1.c,新建一个2_1.c源文件,创建双线程并发完成订票操作,输入后面的范例代码: #include <stdio.h> ...

  3. 线程互斥和同步-- 互斥锁

    一. 线程分离 我们一般创建的线程是可结合的,这个时候如果我们调用pthread_jion()去等待的话,这种等待的方式是阻塞式等待,如果主线程一直等待,主线程就无法做其他的事情了,所以应该使用线程分 ...

  4. python多线程编程(2): 使用互斥锁同步线程

    上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的代码: # ...

  5. python 线程锁_python多线程编程(3): 使用互斥锁同步线程

    问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的 ...

  6. python多线程编程(3): 使用互斥锁同步线程

    问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的 ...

  7. python多线程同步与互斥_python多线程编程(3): 使用互斥锁同步线程

    问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的 ...

  8. 多线程编程(3): 使用互斥锁同步线程

    python多线程编程(3): 使用互斥锁同步线程 问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据n ...

  9. 进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结

    转自:http://www.cnblogs.com/kubixuesheng/p/4355786.html 进程:是个动态的概念,指的是一个静态的程序对某个数据集的一次运行活动,而程序是静态的概念,是 ...

最新文章

  1. 数字集成电路的层次关系
  2. 恭喜CocoStudio 1.5和Mac版本发布
  3. Java Web的Struts2的多语种网站的多语言切换实例
  4. cygwin是一个在windows平台上运行的unix模拟环境,下载与安装
  5. 51nod 1278 相离的圆
  6. java eclipse svn_[Java教程]Eclipse 安装 SVN 的在线插件
  7. 趣谈Linux操作系统01:概述
  8. linux vi 中s 替换方法
  9. YII2中ActiveDataProvider与GridView的配合使用
  10. Ubuntu 16.04下如何安装QT5?
  11. PCM设备的E1接头
  12. MySQl安装与学习,内附SQlyog
  13. 大学生WEB前端静态网页——旅游介绍35页 响应式,
  14. Vue3动态绑定组件警告处理
  15. systemctl的常用命令和使用说明
  16. MATLAB对三阶魔方建模并进行旋转操作
  17. 算法入门四:函数与函数体:
  18. vmware部署优麒麟系统
  19. 微信二维码的生成(java后端)--邀请新人
  20. 编译原理——词法分析(1)

热门文章

  1. mvc html传参数乱码,SpringMVC Controller 接收页面传递的中文参数出现乱码
  2. 基于Java+SpringBoot+vue+node.js实现自行车租赁平台管理系统
  3. sqlserver oracle对比,sqlserver和oracle常用函数对比
  4. ntext在mysql_varchar和text说不清的那些事
  5. java 解压到内存,Java GZip 基于内存实现压缩和解压的方法
  6. 关于 NODE.js 并行线程 worker_threads 的使用与详解。
  7. 空闲队列函数排队 requestIdleCallback
  8. Redis哈希数详解
  9. spring boot 如何修改默认端口号和context path
  10. 使用MATLAB GUI创建图形用户界面GUI