[英]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.