DELPHI的程序多线程的数据怎么同步?
正在写一个程序涉及到多线程同步的问题具体的过程可以抽象为这样(线程A和B都不是主线程,是主线程开启的)线程A获取事物C的属性变量M这个坐标第一次设置为0即M(初始)=0(...
正在写一个程序
涉及到多线程同步的问题
具体的过程可以抽象为这样(线程A和B都不是主线程,是主线程开启的)
线程A 获取事物C的属性变量M 这个坐标第一次设置为0 即M(初始)=0 (
后面设置为从线程B中处理后的数据。)事物A先判断线程B是否启动,如果
没启动则启动线程B 根据事物C的坐标 执行操作A的动作,接着执行操作B的
动作 。[动作B的操作可以对事物C进行消费。比如inc(事物C)]
循环执行线程A的动作直到线程退出。线程B 判断事物C是否存在,不存在则
创建(生产),获取事物新C的属性变量M,并且存储该数据到 事物C属性的
变量M当中 即 M=新获取坐标(C)
执行操作B的动作。动作B的操作可以对事物C进行消费。比如inc(事物C) 当
事物C的某个数据=0
的时候 C 就被消费完了。循环执行线程B的动作直到线程退出。现在的问题
就是 事物C的属性变量M 同时被两个线程操作 而且中间还有很多的其他步
骤,我用了很多方法要么线程 堵塞 ,要么线程无法同步请问应该用什么方
式同步?怎么同步?
伪代码 --不知道是不是可以这么说
创建线程A
1、M=线程B中获得的M(第一次为0,后面为线程B中获得)
2、判断(线程B是否启动)
3、没有启动 则启动线程B
4、执行动作A(M) ----消费这个数据消费完之后才允许它改变
5、执行动作B(inc(事物C)) 消费
6、回到1 直到线程A退出
创建线程B
1、判断是否存在(事物C)
2、不存在则创建(事物C) 生产
3、执行动作B(inc(事物C)) 消费--把这个操作前置可以比单线程更有效率
4、M=得到变量(事物C)----------- 不断生产这个 数据 并且给A进程消
费
5、回到1 直到线程B退出
如何顺利的同步这两个线程?我用了
EnterCriticalSection(My);
try
finally
LeaveCriticalSection(My); //离开临界区
end;
结果线程B被阻塞了。。
主要的问题就是创建事物c之后 M要被重置(生产)。我是希望这个生产和
消费可以协调起来
B线程生产 A线程消费 A消费完 再B线程生产 这个应该怎么实现呢?
C++ DELPHI VB 易 JAVA(只要不是汇编)或者给个类似的伪代码都可以
最好用DELPHI实现,有些流程用上面的伪代码实现,但是涉及到变量锁定异常处理还有事件控制什么的 初始化什么的东西 最好能用DELPHI表述。 展开
涉及到多线程同步的问题
具体的过程可以抽象为这样(线程A和B都不是主线程,是主线程开启的)
线程A 获取事物C的属性变量M 这个坐标第一次设置为0 即M(初始)=0 (
后面设置为从线程B中处理后的数据。)事物A先判断线程B是否启动,如果
没启动则启动线程B 根据事物C的坐标 执行操作A的动作,接着执行操作B的
动作 。[动作B的操作可以对事物C进行消费。比如inc(事物C)]
循环执行线程A的动作直到线程退出。线程B 判断事物C是否存在,不存在则
创建(生产),获取事物新C的属性变量M,并且存储该数据到 事物C属性的
变量M当中 即 M=新获取坐标(C)
执行操作B的动作。动作B的操作可以对事物C进行消费。比如inc(事物C) 当
事物C的某个数据=0
的时候 C 就被消费完了。循环执行线程B的动作直到线程退出。现在的问题
就是 事物C的属性变量M 同时被两个线程操作 而且中间还有很多的其他步
骤,我用了很多方法要么线程 堵塞 ,要么线程无法同步请问应该用什么方
式同步?怎么同步?
伪代码 --不知道是不是可以这么说
创建线程A
1、M=线程B中获得的M(第一次为0,后面为线程B中获得)
2、判断(线程B是否启动)
3、没有启动 则启动线程B
4、执行动作A(M) ----消费这个数据消费完之后才允许它改变
5、执行动作B(inc(事物C)) 消费
6、回到1 直到线程A退出
创建线程B
1、判断是否存在(事物C)
2、不存在则创建(事物C) 生产
3、执行动作B(inc(事物C)) 消费--把这个操作前置可以比单线程更有效率
4、M=得到变量(事物C)----------- 不断生产这个 数据 并且给A进程消
费
5、回到1 直到线程B退出
如何顺利的同步这两个线程?我用了
EnterCriticalSection(My);
try
finally
LeaveCriticalSection(My); //离开临界区
end;
结果线程B被阻塞了。。
主要的问题就是创建事物c之后 M要被重置(生产)。我是希望这个生产和
消费可以协调起来
B线程生产 A线程消费 A消费完 再B线程生产 这个应该怎么实现呢?
C++ DELPHI VB 易 JAVA(只要不是汇编)或者给个类似的伪代码都可以
最好用DELPHI实现,有些流程用上面的伪代码实现,但是涉及到变量锁定异常处理还有事件控制什么的 初始化什么的东西 最好能用DELPHI表述。 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询