zoukankan      html  css  js  c++  java
  • Delphi多线程开发注意事项

    Q1: 多线程中需避免多个线程同时向全局变量进行写入操作,导致访问冲突问题。

    A1:  可以通过使用加锁机制(比如:临界区、互斥、信号量)解决此问题。

     

    Q2:多线程中对于结构体和CLASS类型的全局变量是需要进行加临界区机制来实现数据同步

    A2: 注意:临界区只有在所有的线程都使用它来访问全局内存时才起作用,如果有线程直接调用内存,而不通过临界区,也会造成同时访问的问题。临界区主要是为实现线程之间同步的,但是使用的时候要注意,一定要在使用临界区同步的线程之外建立该临界区(一般在主线程中定义临界区并初始化临界区)。临界区是一个进程里的所有线程同步的最好办法,它不是系统级的,只是进程级的,也就是说它可能利 用进程内的一些标志来保证该进程内的线程同步,据Richter 说是一个记数循环。 临界区只能在同一进程内使用。

     

    Q3:多线程模式下ADOQUERY在查询、执行更新或删除操作时有会报错。

    A3:现在的解决办法是每个线程对象里创建一个ADOCONNECTION,线程对象内的所ADOQuery都连这个ADOConnection,这样就没有问题了。另外ADOQUERY的OPEN和EXECUTE方法都需要加临界区进行保护。

     

    Q4:多线程模式下写日志(写到文件里)时报错,导致转换机宕机

    A4:写日志时通过加锁(临界区)的方式来解决此问题

     

    Q5:多线程模式下使用TLIST导致操作数据时,发现数据不同步以及会报错现象。

    A5:更换为TThreadList就正常。

     

    Q6: 多线程模式下使用TStringList导致操作数据时,发现数据不同步以及会报错现象。

    A6:继承TStringList派生出一个新类型,对派生类的方法(Add, AddObject, Clear, Delete, Find, Insert等等)进行重载,并对每个方法进行加临界区处理。

  • 相关阅读:
    商品尺码规格和颜色需要支持双引号
    php xss 函数
    yar 调用rpc方法
    【转】Linux常用命令大全
    【Netty】最透彻的Netty原理架构解析
    【Git项目管理】分布式 Git
    【SpringBoot】几种定时任务的实现方式
    【Elasticsearch-Java】Java客户端搭建
    【Git项目管理】Git分支
    【Git项目管理】git新手入门——基础教程
  • 原文地址:https://www.cnblogs.com/xumenger/p/4359637.html
Copyright © 2011-2022 走看看