有人可以帮我同步不同数量的线程吗?问题是当线程数从1变为9并且例如两个客户端连接到服务器时,通信应以这种形式同步:client1,client2,client1,client2 ......直到通信结束。 我尝试使用pthread_join,pthread_mutex_lock和pthread_mutex_lock,但这会阻止client1直到完成通信以启动client2。
任何帮助将不胜感激,谢谢你的回复
答案 0 :(得分:2)
我实际上并不清楚线程应该如何同步。如果需要以序列化方式完成某些代码块,则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);
}
答案 1 :(得分:1)
解决方法是在您发送消息后释放锁定,然后在您想要发送另一封消息时再次取消锁定。