delphi 怎么实现多线程的同步
正在写一个程序
涉及到多线程同步的问题
具体的过程可以抽象为这样(线程A和B都不是主线程,是主线程开启的)
线程A 获取事物C的坐标变量M 这个坐标第一次设置为0 即M(初始)=0 (后面设置为从线程B中处理后的数据。)事物A先判断线程B是否启动,如果没启动则启动线程B 根据事物C的坐标 执行操作A的动作,接着执行操作B的动作 。[动作B的操作可以对事物C进行缓慢消除。比如inc(事物C)]
循环执行线程A的动作直到线程退出。
线程B 判断事物C是否存在,不存在则遍历数据,获取事物新C的坐标,并且存储到 事物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、M=得到坐标(事物C)
4、执行动作B(inc(事物C))
5、回到1 直到线程B退出
如何顺利的同步这两个线程?我用了
EnterCriticalSection(My);
try
finally
LeaveCriticalSection(My); //离开临界区
end;
结果线程B被阻塞了。。