मैं सीखना चाहता हूं कि नई सी ++ मानक लाइब्रेरी के साथ एकाधिक थ्रेड कैसे बनाएं और अपने हैंडल को सरणी में स्टोर करें।
मैं धागा कैसे शुरू कर सकता हूं?
मैंने जो उदाहरण देखा है, वे निर्माता के साथ धागा शुरू करते हैं, लेकिन यदि मैं सरणी का उपयोग करता हूं, तो मैं कन्स्ट्रक्टर को कॉल नहीं कर सकता।सी ++ 11 में थ्रेड ऑब्जेक्ट्स की सरणी कैसे बनाएं?
#include <iostream>
#include <thread>
void exec(int n){
std::cout << "thread " << n << std::endl;
}
int main(int argc, char* argv[]){
std::thread myThreads[4];
for (int i=0; i<4; i++){
//myThreads[i].start(exec, i); //?? create, start, run
//new (&myThreads[i]) std::thread(exec, i); //I tried it and it seems to work, but it looks like a bad design or an anti-pattern.
}
for (int i=0; i<4; i++){
myThreads[i].join();
}
}
लेकिन यह एक अस्थायी वस्तु बनाएगा, एक कन्स्ट्रक्टर को कॉल करेगा, असाइनमेंट करेगा, और फिर विनाशक को कॉल करेगा। राज्य असंगत हो सकता है। मैंने कोशिश की और यह काम कर रहा है, लेकिन मुझे नहीं पता कि यह कभी काम करेगा या नहीं। – Squall
यह चाल semantics का उपयोग कर काम करता है। कुछ भी असंगत नहीं होगा, यह डिजाइन द्वारा काम करता है। निष्पादन के नए धागे की स्वामित्व अस्थायी से सरणी तत्व में स्थानांतरित की जाएगी, उसी स्थिति में अस्थायी रूप से निर्मित थ्रेड ऑब्जेक्ट के रूप में अस्थायी को छोड़कर यानी निष्पादन के किसी भी धागे का जिक्र नहीं किया जा सकता है, इसलिए इसे सुरक्षित रूप से नष्ट किया जा सकता है। –