多线程同步问题

kaixindzl 2009-09-11 11:16:58

type
StatRun = record //定义一个结构
Flag: Boolean ;
time: DWORD ; //由GetTickCount得到.
end;


type
TProtectThread = class(TThread)
private
protected
procedure Execute ; override ;
public
RunPLth, //A线程写这个变量
RunTeamth, //B线程写这个变量
Runsend, //C线程写这个变量
RunHPMPth: StatRun ; //D线程写这个变量
end;



TprotectThread 线程作为一个守护线程, 监视 A b c d 四个线程的运行状态, 如果发现其中某个线程异常终止了或长时间无响应, 就调用 TerminateThread 函数 强制结束一次, 然后重新create 此线程实例并运行.

A , B, C, D 四个线程利用上面代码中 TprotectThread 类中的变量写入标记和记录的时间, TprotectThread 线程就读取这些变量来判断 A, b, c, d 线程是否运行正常.

所有线程都是循环的运行, 中途无终止线程事件. sleep(500) 左右.

那么请问:
(1) 有没有更好的办法可以监视 a, b, c, d线程的运行状态呢? 请指点.

(2) 我上面的方法是否也可行? 有没有错误或隐患?

(3) 如果按上述的方法, 那不同线程写入和读取变量时要不要作线程同步?
...全文
80 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwzhifeiji 2010-02-23
  • 打赏
  • 举报
回复
用心分析才行~~~~~~~~~~~~~~~~~~~
Hexpate 2009-09-14
  • 打赏
  • 举报
回复
这么写理论上没什么问题,但是总觉得很奇怪,不过可以解决你的问题,首先4个变量有分别不同的4个线程去改写,在写上并不冲突,在读上可能ProtectThread会与其他4线程冲突,但在你的程序也无所谓,并不会产生很大的影响,顶多是误判别的线程是死了,这种几率还是很小的,只要你设置的时间预估准确,几乎是不可能

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧