我们有两种方法
A(){
....//A-method body
}
B(){
....//B-method body
}
任务是以这种方式同步它们:
在任何启动线程的顺序中,方法A应该等到方法B完成。
假设我们有标准的同步对象 - Mutex,Semphore,Monitor。
如何实施?
更新1
我试过这个。
Mutex mut = new Mutex();
A(){
mut.Lock();
....//A-method body
mut.Release();
}
B(){
mut.Lock();
....//B-method body
mut.Release();
}
但问题是,在这种实施中,有可能首先执行方法B. 我希望 A 一直等到 B 完成
答案 0 :(得分:1)
如果您正在使用JAVA,那么您可以使用倒计时锁定
CountDownLatch latch = new CountDownLatch(1);
A(){
latch.await();
....//A-method body
}
B(){
....//B-method body
latch.countDown();
}
答案 1 :(得分:1)
您的任务通常由事件或信号量完成。在线程A和B外部创建信号量,B在末尾设置信号量,A等待信号量发出信号。
如果您不需要/想要使用同步原语,那么使用全局布尔变量并在线程A中的循环中检查它就足够了(但当然这不会像同步一样有效宾语)。