Является ли обращение к массиву векторов C++ потокобезопасным?
От:
Аноним
Дата:
23.06.12 14:01
Оценка:
В классе C++ объявлен массив векторов:
std::vector<uint8_t> streams[2];
С этим массивом работают 2 потока, первый добавляет-читает-изменяет-удаляет только элементы вектора streams[0], второй поток добавляет-читает-изменяет-удаляет только элементы вектора streams[1]. Является ли данная операция потокобезопасной?
Re: Является ли обращение к массиву векторов C++ потокобезопасным?
Здравствуйте, Аноним, Вы писали:
А>В классе C++ объявлен массив векторов:
А>std::vector<uint8_t> streams[2];
А>С этим массивом работают 2 потока, первый добавляет-читает-изменяет-удаляет только элементы вектора streams[0], второй поток добавляет-читает-изменяет-удаляет только элементы вектора streams[1]. Является ли данная операция потокобезопасной?
У вас каждый потоу работает со своим вектором, так что я не вижу проблем.
Само обращение не может быть потокобезопасным или нет.
> std::vector<uint8_t> streams[2]; > > С этим массивом работают 2 потока, первый добавляет-читает-изменяет-удаляет > только элементы вектора streams[0], второй поток > добавляет-читает-изменяет-удаляет только элементы вектора streams[1].
Это как можно добавлять или удалять один элемент вектора ?
Является > ли данная операция потокобезопасной?
Нет. Елси один поток меняет вектор, другой его читает, уже нужно защищать вектор
мьютексами.
Posted via RSDN NNTP Server 2.1 beta
Re: Является ли обращение к массиву векторов C++ потокобезопасным?
Здравствуйте, Аноним, Вы писали:
А>В классе C++ объявлен массив векторов:
А>std::vector<uint8_t> streams[2];
А>С этим массивом работают 2 потока, первый добавляет-читает-изменяет-удаляет только элементы вектора streams[0], второй поток добавляет-читает-изменяет-удаляет только элементы вектора streams[1]. Является ли данная операция потокобезопасной?
Ответ зависит от того, что подразумевается под потокобезопасностью в данном конкретном случае.
Re[2]: Является ли обращение к массиву векторов C++ потокобезопасным?
Здравствуйте, MasterZiv, Вы писали:
>> std::vector<uint8_t> streams[2]; MZ>Это как можно добавлять или удалять один элемент вектора ?
там массив векторов.
Один поток обращается к первому вектору, другой — ко второму.
>> Является ли данная операция потокобезопасной?
MZ>Нет. Елси один поток меняет вектор, другой его читает, уже нужно защищать вектор мьютексами.
Вектора то разные.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: Является ли обращение к массиву векторов C++ потокобезопасным?
On 06/24/2012 12:35 PM, MasterZiv wrote:
>> С этим массивом работают 2 потока, первый добавляет-читает-изменяет-удаляет >> только элементы вектора streams[0], второй поток >> добавляет-читает-изменяет-удаляет только элементы вектора streams[1]. > > Это как можно добавлять или удалять один элемент вектора ?
А массивы, не заметил блин...
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Является ли обращение к массиву векторов C++ потокобезопасным?
On 06/24/2012 02:48 PM, CreatorCray wrote:
>> > std::vector<uint8_t> streams[2]; > MZ>Это как можно добавлять или удалять один элемент вектора ? > > там массив векторов. > Один поток обращается к первому вектору, другой — ко второму.
Если ты к любому объекту в потоке (или нескольких) будешь обращаться только на
чтение и нигде во время жизни потока (потоков) этот объект не будет меняться,
тогда оно будет "потокобезопасным" -- т.е. не будет гонок.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Является ли обращение к массиву векторов C++ потокобезопасным?
Здравствуйте, MasterZiv, Вы писали:
MZ>Если ты к любому объекту в потоке (или нескольких) будешь обращаться только на MZ>чтение и нигде во время жизни потока (потоков) этот объект не будет меняться, MZ>тогда оно будет "потокобезопасным" -- т.е. не будет гонок.
Там уже и так разные потоки к разным векторам обращаются. Перечитай первое сообщение темы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока