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