Yeni C++ standart kitaplığı ile birden çok iş parçacığı oluşturmayı öğrenmek ve tutamaçlarını bir dizide saklamak istiyorum.
Bir iş parçacığı nasıl başlatırım?
Gördüğüm örnekler kurucu ile bir iş parçacığı başlatır, ancak diziyi kullanırsam, yapıcıyı arayamıyorum.C++ 11'de bir dizi konu nesnesi nasıl oluşturulur?
#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();
}
}
Ancak geçici bir nesne oluşturacak, bir yapıcıyı arayacak, ödev yapıp yıkıcıyı arayacaktır. Devlet tutarsız olabilir. Denedim ve çalışıyor, ama işe yarayıp yaramadığını bilmiyorum. – Squall
Hareket semantiği kullanarak çalışır. Hiçbir şey tutarsız olmaz, tasarıma göre çalışır. Yeni icra sırasının mülkiyeti geçici olarak dizi elemanına aktarılır, geçici olarak geçici olarak yapılandırılmış bir iplik nesnesi ile aynı durumda bırakılır, yani herhangi bir icra ipliğine atıfta bulunulmaksızın güvenli bir şekilde imha edilebilir. –