Мне было интересно, будет ли следующий код считаться поточно-ориентированным. Я думаю, что это должно быть, но я не слишком знаком с тем, что происходит под капотом.
По сути, у меня есть эта функция в классе Foo, которая будет вызываться в главном потоке и принимает вектор в качестве аргумента, т. Е.
void Foo::func( vector<int> v)
В Foo у меня также есть личный член,
vector< vector<int> > vecOfVec;
В пределах func
я просто вытолкну любой новый v
на vecOfVec
и проверю размер v
. Если v
меньше ожидаемого размера, я бы хотел запустить другой поток, который заполняет v
некоторыми известными, заранее заданными значениями, например,
void Foo::func( vector<int> v)
{
int size = v.size();
int index = vecOfVec.size();
vecOfVec.push_back(v);
if (size < 1000)
{
boost::thread t( boost::bind( &Foo::PushBackZeros, this, vecOfVec, index) );
}
}
Foo::PushBackZeros
будет, как следует из названия, просто заполнить вектор в 'vecOfVec [index]' нулями, пока его размер не увеличится до 1000;
Теперь я не вижу каких-либо одновременных операций чтения или записи ни для одного из элементов vecOfVec
. Очевидно, что есть вероятность одновременных операций над всем объектом, но никогда не будет одновременностей с конкретным элементом vecOfVec
.
Может ли кто-нибудь объяснить, будет ли вышеизложенное считаться поточно-ориентированным? Будет ли такая же степень и для карт STL? Если нет, пожалуйста, объясните. Ура!