簡體   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