Я хочу использовать один объект в нескольких потоках, используя C++. Я знаю из java, что потоки разделяют все переменные, но похоже, что в C++ это другое.Как использовать один объект в нескольких потоках?
я иметь следующую структуру для хранения даты
Class Flow: has multiple integers
Class UE: has a list<Flow*>
Class FlowTable: has a map<int,UE*>
Теперь есть две темы (объекты: InOutReader и OutInReader), каждый из них имеет FlowTable * и будет читать и/или вставить данные в FlowTable ,
в основном() моего стартера Я вызываю новый FlowTable(), создаю потоковые объекты и передаю FlowTable * с помощью setter. Но, в конце концов, похоже, что эти два потока работают с разными объектами FlowTable.
class InOutReader{
public:
start(){
while(true){
//read data from somewhere(tap-interface1)
//extract address from ip packet and tcp/udp header etc
Flow* myflow = new Flow(IPsrc,IPdest);
this->myflowTable->insertFlow(myflow);
}
}
}
class OutInReader{
public:
start(){
while(true){
//read data from somewhere(tap-interface1)
//extract address from ip packet and tcp/udp header etc
Flow* myflow = new Flow(IPsrc,IPdest);
this->myflowTable->existsFlow(myflow);// should return true if a flow with the same data was inserted before
}
}
}
основной программе FlowTable * myflowTable;
startThreadOne(){
InOutReader ior = InOutReader();
ior.setFlowTable(myFlowTable);
ior.start();
}
startThreadtwo(){
InOutReader oir = InOutReader();
oir.setFlowTable(myFlowTable);
oir.start();
}
void main(){
myFlowTable = new FlowTable();
std::thread t1 = std::thread(startThreadOne);
std::thread t2 = std::thread(startThreadtwo);
t1.join();
t2.join();
}
Что мне нужно сделать, чтобы использовать один и тот же объект FlowTable в нескольких потоках?
вам нужно использовать разделяемую память или каналы –
Это не так. 'std :: thread' все еще легкие процессы, разделяющие одно и то же пространство памяти. В этом случае вам нужно синхронизировать весь доступ к «FlowTable». –
Информация, предоставленная вами, кажется недостаточной, чтобы указать, где ваша проблема. Если вы передаете двум потокам указатель на один и тот же объект, то они могут поделиться им (надежда на правильную синхронизацию). Кстати, что делает 'start()' do? это ваша долговременная задача? – 5gon12eder