![](/img/trans.png)
[英]What is the proper way to pass a c++ object from one thread to another using boost::thread?
[英]How to pass data from one thread to another running thread using pthread in C++
有沒有一種方法可以將數據從一個正在運行的線程傳遞到另一個正在運行的線程。 線程之一顯示菜單,用戶使用cin選擇一個選項。 另一個線程正在處理數據,並在每個“ X”時間段內將結果發送到服務器。 因為我可以在cin指令中等待整個程序等待用戶輸入數據,所以我將該程序分為兩個線程。 菜單的數據輸入在另一個線程中使用。
謝謝
據我所知,使用pthreads並沒有直接方法將任意數據從一個線程傳遞到另一個線程。
但是,線程共享相同的內存空間。 結果,一個線程可以修改內存中的對象,而另一個線程可以讀取它。 為了避免爭用條件,需要使用互斥鎖來同步訪問此共享內存對象。
線程1:用戶響應時:鎖定互斥鎖,修改對象並解鎖互斥鎖。
線程2:每個“ x”時間段:鎖定互斥鎖,讀取對象狀態,解鎖互斥鎖,然后根據對象狀態進行處理。
我在http服務器中遇到了同樣的問題,我得到一個線程來接受客戶端套接字,但是將它們分發給另一個線程。 我的建議是,等待線程和處理線程使用相同的隊列,並且將隊列的指針傳遞給兩個線程,等待線程在有用戶輸入時將數據寫入隊列,並且處理線程休眠直到隊列不為空。例如:
ring_queue rq; //記住將rq的地址傳遞給waiting_thread和dealing_thread
等待線程
while(true){
res = getInput();//block here
rq->put(res);
}
======================================
處理線程
while(true){
while(rq.isEmpty()){
usleep(100);
}
//not empty
doYourWorks();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.