c语言 - 暂停循环,直到布尔值发生变化



我正在尝试对守护进程进行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)
}
}

但这行不通。我该怎么办?我听说多线程可以在这种情况下帮助我。但我知道的不多。

我认为你需要。你的函数中有异步这个名字,所以为什么不做异步。

  1. 创建工作线程
  2. 创建互斥锁
  3. 使工作线程锁定互斥锁
  4. 对于每个对等方:
    1. 发送请求
    2. 它有效吗? 如果没有,请重试
  5. 解锁互斥锁(全部完成)

执行此操作时,可以使用pthread_mutex_trylock检查工作线程是否已完成。如果您只想等到它完成,请使用pthread_mutex_lock.永远不要使用while (pthread_mutex_trylock(mutex));来做到这一点。

听说多线程可以在这种情况下帮助我。但我知道的不多。

基本上,使用线程,您可以并行执行代码。问题是,它们共享堆内存,并且能够在其他线程尝试使用变量时修改变量。这将导致问题非常难以调试,有时它们只发生百万分之一,因为它们取决于时间。要同时阻止访问,您可以使用互斥锁。它有点像线程的锁。一次只能锁定一次互斥锁。例如,一个线程可以在更改变量时锁定互斥锁。另一个线程也可以尝试锁定它。这将导致它阻塞,直到第一个线程解锁互斥锁。在该块之后,第二个线程可以读取变量并解锁互斥锁。

阅读有关线程的教程,它们非常有用。