2016-01-10 94 views
4

我的代碼:爲什麼我的程序打印垃圾?

#include <iostream> 
#include <thread> 

void function_1() 
{ 
    std::cout << "Thread t1 started!\n"; 
    for (int j=0; j>-100; j--) { 
     std::cout << "t1 says: " << j << "\n"; 
    } 
} 

int main() 
{ 
    std::thread t1(function_1); // t1 starts running 

    for (int i=0; i<100; i++) { 
     std::cout << "from main: " << i << "\n"; 
    } 

    t1.join(); // main thread waits for t1 to finish 
    return 0; 
} 

我同時爲了提高打印main遞減的順序創建thread,打印數量。

樣品輸出here。爲什麼我的代碼打印垃圾?

+0

我不確定你爲什麼不能訪問它。這是一個公衆的主旨。 – SPV

回答

11

兩個線程都在同時輸出,從而擾亂你的輸出。 在打印部分需要某種線程同步機制。

有關使用std::mutexstd::lock_guard組合cout的示例,請參閱this answer

9

這不是「垃圾」—它是你要求的輸出!它只是混亂起來,因爲您已經使用了總計同步機制來防止其他線程(不是原子的)中的單個行被其他線程中的類似行中斷(這些行不是原子的)。

傳統上我們會鎖定一個互斥體圍繞每一行。