मैं कोड निम्नलिखित C++ 11 धागा जानने के लिए और करने के लिए कोशिश कर रहा हूँ:सी ++ 11 थ्रेड में फ़ंक्शन का कोई प्रभाव क्यों नहीं पड़ता है?
#include <iostream>
#include <thread>
#include <vector>
#include <mutex>
#include <algorithm>
void add(int& i){
std::mutex some_mutex;
// std::cout << " I am " << std::endl;
std::lock_guard<std::mutex> guard(some_mutex);
i++;
}
int main(){
int i = 0;
std::vector<std::thread> vec_threads;
for(int i = 0; i < 10; i++){
vec_threads.push_back(std::thread(add,std::ref(i)));
}
std::for_each(vec_threads.begin(),vec_threads.end(),
std::mem_fn(&std::thread::join));
std::cout<< " i = " << i << std::endl;
return 0;
}
मैं एक vector
कि std::thread
रखती बनाया है और मैं एक धागे से जोड़ने फ़ंक्शन को कॉल करें और रेफरी द्वारा मैं गुजरती हैं। मुझे लगता है कि धागा क्या करेगा (i = i+1
जोड़ने), अंतिम परिणाम मैं जो चाहता था उसे प्रतिबिंबित नहीं करता है।
उत्पादन: मैं = 0
उम्मीद उत्पादन: i = 10
@Ajay लेकिन user1887915 प्रत्येक थ्रेड के लिए मेरे म्यूटेक्स के बारे में भी चिंतित था ... जो भयानक विचार था। – pokche