繁体   English   中英

如何同步不同数量的线程?

[英]how to synchronize a varied number of threads?

有人可以帮我同步不同数量的线程吗? 问题是,当线程数可以从1到9变化,并且例如当两个客户端连接到服务器时,通信应以以下形式进行同步:client1,client2,client1,client2 ...,直到通信结束。 我尝试使用pthread_join,pthread_mutex_lock和pthread_mutex_lock,但这会阻塞client1,直到完成通信以启动client2。

任何帮助,将不胜感激,并感谢您的答复

我实际上不太了解如何同步线程。 如果需要以串行方式完成某些代码块,则pthread_mutex_lock应该足够好。 如果应该保留操作顺序(1,2,3,1,2,3),建议使用pthread_mutex_lock以及一些变量,该变量指示允许哪个线程现在进入关键部分。

// id_to_go iterates from 0 up to number_of_thread - 1
// each thread has my_id from the same range
while(1)
{
  pthread_mutex_lock(mutex);
  if (id_to_go == my_id)
  {
    // set to next thread id 
    id_to_go = (id_to_go + 1) % number_of_threads;
  }
  else
  {
    // it's not our turn, try again
    pthread_mutex_unlock(mutex);
    continue;
  }

  handle_the_client;
  pthread_mutex_unlock(mutex);
}

解决方案是在发送消息后释放锁,然后在要发送另一个消息时再次使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM