好久没玩D了,我想请问下这种情况下是否有线程安全的问题?

jiju jiju 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
本来我觉得是没有的,突然想到好像大部分vcl都不是线程安全的,怕写了出问题,到时候难改(线程出问题报错莫名其妙的), 若按下面给的简单例子,我怕测试不出问题,所以,特请教各位,望给个明确答案。



{
4个类
TCCC包含一堆TBBB,TBBB又包含一堆TAAA
TMythread 也包含一堆TBBB,并且这一堆TBBB是 TCCC里面TBBB列表的一个子集,(相同的指针都指向同一个对象);
每个线程TMythread 操作的TBBB都不相同,
}

type
TAAA = (TPersistent)
public
procedure cal_andWritetoDataBase(); //内部计算并写入数据库
end;



TBBB = (TPersistent)
private
FAAAs:TList;
public
procedure AddAAA(Created_TAAAObject:TAAA); //加入 已经创建好的 TAAA对象
procedure Clear; //清除FAAA列表
function count:integer;
property AAAs[iIndex:integer]:TAAA read GetAAA write SetAAA;
end;


TCCC = (TPersistent)
private
FBBBs:TList;
public
procedure AddBBB(newValue:TBBB);//加入 已经创建好的 TBBB对象
procedure Clear;//清除FBBB列表
function count:integer;//列表大小;
property BBBs[iIndex:integer]:TBBB read GetBBB write SetBBB;
end;

TMyThread = class(TThread)
private
FBBBs:TList;
public
procedure AddBBB(newValue:TBBB);//加入 已经创建好的 TBBB对象
procedure Clear;//清除FBBB列表
function count:integer;//列表大小;

protected
procedure Execute; override;
end;

//TCCC 含有TBBB的一个列表,只在线程运行前和运行后操作TBBB,
//TCCC运行和操作都在在主线程,TBBB,TAAA创建和销毁都在主线程
//TMyThread 含有TBBB的一个列表,这个列表是TCCC列表的一个子集,在线程运行中进行操作

//主线程

var
CCC:TCCC;
mythread:array [0..5]of TMyThread ;
procedure initClass()
var
AAA:TAAA;
BBB:TBBB;
i,j:integer;
begin
// CCC已创建
for i:=0 to 10 do
begin
BBB:=TBBB.create;
for i:=0 to 50 do
begin
AAA:=TAAA.create;
BBB.AddAAA(AAA) ;
end;
CCC.AddBBB(BBB);
end;

....
for i:=0 to CCC.count do
begin
mythread[i mod 5].AddBBB(CCC.BBB[i]);
end;
for i:=0 to 5 do
begin
mythread[i].Resume;
end;
end;

procedure TMyThread.Execute;
begin
for i:=0 to count do
begin
for j:=0 to TBBB(FBBBs.Items[i]).count do
TBBB(FBBBs.Items[i]).AAAs[j].cal_andWritetoDataBase(); //内部计算并写入数据库

end;
end;




请各位看下,哪里会出问题???凭空写的,部分细节错误不计算在内。



...全文

相关推荐

玩客云刷机教程及全套软件资料

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 你是否想让玩客云解锁更多潜能?现在,只需一套完整工具与教程,轻松达成目标! 先说工具,包含玩客云刷机软件、固件刷写软件,还有关键的玩客云刷机固件及 openwrt 固件。这版 openwrt 固件功能强大,特殊功能、QOS 功能、去除广告功能一应俱全,且完美适配玩客云新旧版本。 再看教程,手把手教学视频详细到每一步,跟着做就行。从软件安装到固件刷写,全程无死角讲解,不用担心刷机失败。 刷机前,有几点要注意。一是备份数据,刷机过程可能会清除原有数据;二是确保设备电量充足,避免中途因电量不足出错;三是严格按照教学视频步骤操作,不要随意跳步或更改设置。 按照这套流程来,刷机成功率极高,祝你顺利解锁玩客云新功能,享受畅快网络体验!

KaiyuanCode

VM中开启D3D玩3D游戏的教程

本教程原创讲述如何在VM里面开启3D支持,方便VM游戏玩家使用VM万3D游戏

VMwaresctc

路由器:有线(d | less)DNSDHCP路由器配置器

路由器:有线(d | less)DNSDHCP路由器配置器

蓝色山脉

数字-有线数字电视频道配置表.pdf

数字-有线数字电视频道配置表.pdf

hhappy0123456789

Blaber:玩 sinatra 和 D3

布拉伯 玩 sinatra 和 D3 使用的脚本 我使用了 Jason Davies 的 word d3-cloud 项目 我学到了什么 为了使用 JS 库和框架,如 angular、D3 等。你的一些路由必须返回 JSON,JS 框架将在另一条路由中使用它(通过 AJAX 发生) - 看看 views/home.slim这样的例子。 Sinatra 怪癖 单独文件中的模块应该在 lib/sinatra 目录中,并且在模块 Sinatra 中。 参见 helpers.rb。 运行应用程序 bundle exec rackup -p 3000 这将在本地机器的 3000 端口上运行。 Heroku 托管地址 应用程序网址是: :

moseswangbp981
评论 12
收藏 已收藏
分享
返回顶部