线程同步

时间:2014-06-20 08:24:09

标签: multithreading synchronization

我们有两种方法

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 完成

2 个答案:

答案 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中的循环中检查它就足够了(但当然这不会像同步一样有效宾语)。