我看到很多人對這樣乙個問題尋求幫助:在多執行緒時,往控制台視窗輸出的內容是亂序的。舉個非常簡單的例子,如下:
#include "stdafx.h"
#include using namespace std;
dword winapi threadproc1(
lpvoid lpparameter
){ int i=0;
while ( i<20 )
{cout<<"first thread cout:"<
建立了兩個子執行緒,每個子執行緒各自輸出內容。執行結果:控制台上輸出的內容是亂序的,而且每次結果不盡相同。
原因:往控制台視窗輸出的過程(cout)並不是多執行緒安全的,在乙個執行緒輸出過程中另乙個執行緒也可以輸出。
解決辦法:對輸出出進行同步,利用臨界區就可以很容易辦到。**修改如下:
critical_section g_cs; //定義乙個臨界區
initializecriticalsection( &g_cs ); //在程式開始的地方,對臨界區初始化
在所有涉及到輸出的地方改為:
entercriticalsection( &g_cs );
cout<<"first thread cout:"<
總結:在編寫多執行緒的程式時,一定要特別注意同步的問題,仔細的考慮清楚哪些變數、資源、操作需要進行同步,否則就會得到莫名其妙的結果。
**:
Python 多執行緒控制台輸出錯亂
多執行緒在使用print 時,會在控制台上出現形如以下的錯亂顯示 簡單搜尋了一下,網上有說 python3 的print是執行緒安全的,但是我這個是 python 3.8.5 啊。再仔細看一下,發現只有換行是錯亂的。這裡我想到了print 是自動新增換行的,可能這個新增換行的時候不是執行緒安全的,於...
控制台輸出中文亂碼問題
問題描述 cout 中文字元 在控制台輸出時出現亂碼。解決辦法 重新點出選單,選 預設值 項,發現 預設值 裡的 當前 頁 是可以設定,有兩個選項 437 oem 美國 和 936 ansi oem 簡體中文 gbk 將 當前 頁 設定為 936 ansi oem 簡體中文 gbk 點 確定 沒有發...
BCB控制台輸出中文的問題
bcb6控制台輸出中文是沒有問題的,但是wcout輸出寬字元中文 wchar t 是不正常的,但wprintf輸出是正常的。在cb10中可以設定 setlocale lc ctype,wprintf wcout.imbue locale lc ctype cb10 可行 但在cb6中是不行的,而co...