簡體   English   中英

C ++多線程文本輸出打印到Dos控制台重疊/缺少輸出

[英]C++ Multi-thread text output print to dos console overlapped/Mess up the outputs

我有一個從dos提示符執行的多線程程序,使用std :: cout有一些打印和輸出轉儲到dos控制台,但是當thread1和thread2完成它的工作,然后join()到主應用程序時,一些打印輸出和輸出重疊且未對齊(沒有換行符,互相碰到)。

有時候他們還好。 如果您有什么建議,非常感謝您的幫助。

安德魯

好吧,很簡單。 輸出沒有並發控制,您正在爭奪數據。 您需要讓線程在使用輸出之前鎖定互斥量,然后在完成操作后將其釋放。

我的意思是,如果他們希望同時打印到同一資源,我希望它們會重疊。

解決多線程共享資源問題的一種常見方法是使用稱為互斥體( http://en.wikipedia.org/wiki/Mutex ),信號量( http://en.wikipedia.org/wiki/Semaphore_ (編程) )或只是一個鎖。 當線程要打印時,您可以抓住“鎖定令牌”,完成后釋放它。 如果鎖令牌已被使用,則該線程將不得不等待直到可用。

這絕不是一個完整的解釋,而是一些閱讀來獲取有關此問題的背景知識。

據我所知,cout上的每個單獨的<<操作符都是線程安全的。 我沒有參考來證明這一點。

您可以將輸出緩沖在stringstream對象中,然后將其一次性轉儲到cout(即使用單個<<操作符)

寫入輸出不是線程安全的,這會導致混合輸出。 您需要同步對標准輸出的訪問,以便同一時間最多可以寫入一個線程。 最簡單的方法是使用互斥鎖,以便一個線程“擁有”標准輸出,直到完成寫入為止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM