我正在尝试对守护进程进行RPC调用。 现在的问题是。我想进行多个异步 RPC 调用,这会阻塞消息缓冲区。所以我想一个接一个地做。 我在关注什么
bool wait;
success(){
// On success from send_to_single_peer this will run
wait = false;
}
send_to_single_peer(peer){
wait = true
//makes an RPC call for sendcustommsg to a peer and goes to sucess function
}
sendmultipleasync(){
for(//conditions) {
send_to_single_peer(peer[i]);
do{}
while(wait)
}
}
但这行不通。我该怎么办?我听说多线程可以在这种情况下帮助我。但我知道的不多。
我认为你需要。你的函数中有异步这个名字,所以为什么不做异步。
- 创建工作线程
- 创建互斥锁
- 使工作线程锁定互斥锁
- 对于每个对等方:
- 发送请求
- 它有效吗? 如果没有,请重试
- 解锁互斥锁(全部完成)
执行此操作时,可以使用pthread_mutex_trylock
检查工作线程是否已完成。如果您只想等到它完成,请使用pthread_mutex_lock
.永远不要使用while (pthread_mutex_trylock(mutex));
来做到这一点。
听说多线程可以在这种情况下帮助我。但我知道的不多。
基本上,使用线程,您可以并行执行代码。问题是,它们共享堆内存,并且能够在其他线程尝试使用变量时修改变量。这将导致问题非常难以调试,有时它们只发生百万分之一,因为它们取决于时间。要同时阻止访问,您可以使用互斥锁。它有点像线程的锁。一次只能锁定一次互斥锁。例如,一个线程可以在更改变量时锁定互斥锁。另一个线程也可以尝试锁定它。这将导致它阻塞,直到第一个线程解锁互斥锁。在该块之后,第二个线程可以读取变量并解锁互斥锁。
阅读有关线程的教程,它们非常有用。